SQL不会在Phusion Passenger下的生产中执行

时间:2011-07-09 20:40:39

标签: ruby-on-rails activerecord passenger

我有类似以下的代码:

class TheClass < ActiveRecord::Base
  connection.execute "set language 'us_english'"
  // the rest of the code
end

执行命令不会在Passenger下的生产中执行!使用Mongrel没关系,把代码放在后面调用的函数中,Passenger +开发设置也可以。

Passenger处理连接或我不知道的Class instanciation的方式有什么不同吗?

编辑:

很明显,这是乘客建立联系的方式。所以问题归结为“在建立连接时是否有支持的方式执行SQL语句?”

2 个答案:

答案 0 :(得分:1)

我的通灵调试表明你被乘客的分叉模型所困扰。

基本上,Passenger从主进程中分离出一堆工作进程,这些进程已经加载了rails环境。这减少了工作人员初始化所需的时间,因为所有模型,控制器等类都已存在。

现在,来自Passenger文档:

  

注意Phusion Passenger   自动重新建立   连接到数据库   创建一个新的工作进程,其中   这就是你通常不会遇到的原因   使用智能时的任何数据库问题   产卵模式。

您的connection.execute语句在加载TheClass时运行。这实际上只发生一次,在父进程中分配所有工人。工作人员各自建立自己的连接,但从未运行“设置语言”查询,因为已经加载了TheClass。它在dev模式下工作,因为每次都会重新加载你的类。

你可以在application.rb中进行某种设置来告诉ActiveRecord你的连接语言,否则你可能不得不在before_filter中运行该查询。

答案 1 :(得分:0)

检查您的乘客错误日志,这些日志可能与标准的rails日志文件不同。