我有一个类似于以下代码的代码:
class TheClass < ActiveRecord::Base
connection.execute "set language 'us_english'"
// the rest of the code
endexecute命令不会在生产过程中被执行!使用Mongrel是可以的,将代码放入稍后调用的函数工作,Passenger+development设置也能工作。
乘客处理连接或类实例化的方式有什么不同吗?
编辑:
很明显,这是乘客连接的方式。因此,问题归结为“在建立连接时是否有一种支持的方法来执行SQL语句?”
发布于 2011-07-10 07:25:46
我的精神调试显示你被乘客的叉子咬了。
基本上,乘客叉出一个主进程,它已经加载了您的rails环境。这减少了工人初始化所需的时间,因为您的所有模型、控制器等类都已经存在。
现在,从乘客资料来看:
注意到,Phusion乘客在创建新的工作进程时会自动重新建立到数据库的连接,这就是为什么在使用智能产卵模式时通常不会遇到任何数据库问题。
connection.execute语句在加载TheClass时运行。这实际上只发生了一次,在父进程中是分叉所有的工人。每个工作人员都建立自己的连接,但不会运行您的“set语言”查询,因为TheClass已经加载。它在dev模式下工作,因为每次都会重新加载类。
您可以在application.rb中进行某种设置,告诉ActiveRecord您的连接语言,否则您可能不得不在before_filter或其他地方运行该查询。
发布于 2011-07-10 01:03:49
检查乘客错误日志,这些可能与标准rails日志文件不同。
https://stackoverflow.com/questions/6637340
复制相似问题