在Rails中,在初始化程序/ environment.rb中,如果正在加载webapp本身(脚本/服务器),那么确定detemrine的方法是什么。
所有初始化程序都是为迁移脚本/控制台和其他rails任务加载的,但在我的情况下,只有在初始化服务器本身时才需要加载一些东西。
我的想法:检查$ 0
谢谢! 雷托
答案 0 :(得分:3)
因为有多个应用程序服务器,每个都有自己的初始化策略,所以我建议可靠地挂钩到服务器启动过程的唯一方法: ActionController :: Dispatcher 。
调度员有一些回调;即:
prepare_dispatch
(已添加to_prepare
)before_dispatch
after_dispatch
“开始”回调在开发模式中的每个请求之前以及生产模式中的第一个请求之前运行。 Rails配置对象允许您通过自己的to_prepare
方法添加此类回调:
Rails::Initializer.run do |config|
config.to_prepare do
# do your special initialization stuff
end
end
不幸的是,据我所知,这个回调将始终运行,因为Rails初始化程序调用{{1}},无论我们是使用服务器启动还是启动脚本/控制台甚至是rake任务。你想避免这种情况,所以你可以在你的环境中尝试这个.rb:
Dispatcher.run_prepare_callbacks
现在,您的“特殊内容”将仅在生产模式中的第一个请求之前执行,但在开发之前每个请求之前执行。如果您正在加载额外的库,则可能希望通过在Rails::Initializer.run do |config|
# your normal stuff
end
if defined? ActionController::Dispatcher
ActionController::Dispatcher.to_prepare do
# your special stuff
end
end
或if
周围添加load
语句来避免加载两次。 require
方法不会加载一个文件两次,但我仍然建议您放置一个警卫。
答案 1 :(得分:0)
可能有更好的方法可以做到这一点,但由于我不知道,我可能会更改脚本/服务器以设置某种环境变量。
然后我会对该环境变量进行初始化程序检查。