Ruby on rails 确定脚本/服务器是否正在启动
在Rails中,在initializer/environment.rb中,如果webapp本身正在加载(脚本/服务器),那么使用什么样的方式来确定 所有初始化器都是为迁移脚本/控制台和其他rails任务加载的,但在我的例子中,只有在服务器本身初始化时才需要加载一些东西 我的想法:0美元 谢谢!Ruby on rails 确定脚本/服务器是否正在启动,ruby-on-rails,ruby,initialization,Ruby On Rails,Ruby,Initialization,在Rails中,在initializer/environment.rb中,如果webapp本身正在加载(脚本/服务器),那么使用什么样的方式来确定 所有初始化器都是为迁移脚本/控制台和其他rails任务加载的,但在我的例子中,只有在服务器本身初始化时才需要加载一些东西 我的想法:0美元 谢谢! Reto可能有更好的方法来实现这一点,但由于我不知道有这样的方法,我可能会修改script/server来设置某种环境变量 然后我会让我的初始值设定项检查该环境变量。因为有多个应用程序服务器,每个应用程序
Reto可能有更好的方法来实现这一点,但由于我不知道有这样的方法,我可能会修改script/server来设置某种环境变量
然后我会让我的初始值设定项检查该环境变量。因为有多个应用程序服务器,每个应用程序服务器都有自己的初始化策略,我建议可靠地连接到服务器启动过程的唯一方法:ActionController::Dispatcher 调度器有一些回调;即:
(添加了prepare\u dispatch
)以\u prepare
发送前
- 调度后的
方法将此类回调添加到\u prepare
方法:
Rails::Initializer.run do |config|
config.to_prepare do
# do your special initialization stuff
end
end
不幸的是,据我所知,自从Rails初始值设定项调用Dispatcher.run_prepare_callbacks以来,这个回调总是会运行的,不管我们是使用服务器还是脚本/控制台,甚至是rake任务启动。您希望避免这种情况,因此可以在您的环境中尝试。rb:
Rails::Initializer.run do |config|
# your normal stuff
end
if defined? ActionController::Dispatcher
ActionController::Dispatcher.to_prepare do
# your special stuff
end
end
现在,您的“特殊材料”将仅在生产模式中的第一个请求之前执行,但在开发中的每个请求之前执行。如果要加载额外的库,您可能希望在
load
或require
周围放置If
语句,以避免加载两次。require
方法不会两次加载单个文件,但我仍然建议您对其进行保护。谢谢!检查调度员听起来是个很好的主意!但我不会挂在“准备”上,因为我只需要做一次(在启动时)。但是概念还是一样的!很好:我明白了,不,ActionController::Dispatcher在任何情况下都是定义的。这可能是因为我正在使用jruby。不知道我想我现在会降到0美元。无论如何谢谢你!没有关系!它工作得非常好,愚蠢的我在错误的位置放置了一个“放置”“已发送已加载”;)。谢谢