我有类似以下的代码:
class TheClass < ActiveRecord::Base
connection.execute "set language 'us_english'"
// the rest of the code
end
执行命令不会在Passenger下的生产中执行!使用Mongrel没关系,把代码放在后面调用的函数中,Passenger +开发设置也可以。
Passenger处理连接或我不知道的Class instanciation的方式有什么不同吗?
编辑:
很明显,这是乘客建立联系的方式。所以问题归结为“在建立连接时是否有支持的方式执行SQL语句?”
答案 0 :(得分:1)
我的通灵调试表明你被乘客的分叉模型所困扰。
基本上,Passenger从主进程中分离出一堆工作进程,这些进程已经加载了rails环境。这减少了工作人员初始化所需的时间,因为所有模型,控制器等类都已存在。
现在,来自Passenger文档:
注意Phusion Passenger 自动重新建立 连接到数据库 创建一个新的工作进程,其中 这就是你通常不会遇到的原因 使用智能时的任何数据库问题 产卵模式。
您的connection.execute语句在加载TheClass时运行。这实际上只发生一次,在父进程中分配所有工人。工作人员各自建立自己的连接,但从未运行“设置语言”查询,因为已经加载了TheClass。它在dev模式下工作,因为每次都会重新加载你的类。
你可以在application.rb中进行某种设置来告诉ActiveRecord你的连接语言,否则你可能不得不在before_filter中运行该查询。
答案 1 :(得分:0)
检查您的乘客错误日志,这些日志可能与标准的rails日志文件不同。