Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/62.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 确定脚本/服务器是否正在启动_Ruby On Rails_Ruby_Initialization - Fatal编程技术网

Ruby on rails 确定脚本/服务器是否正在启动

Ruby on rails 确定脚本/服务器是否正在启动,ruby-on-rails,ruby,initialization,Ruby On Rails,Ruby,Initialization,在Rails中,在initializer/environment.rb中,如果webapp本身正在加载(脚本/服务器),那么使用什么样的方式来确定 所有初始化器都是为迁移脚本/控制台和其他rails任务加载的,但在我的例子中,只有在服务器本身初始化时才需要加载一些东西 我的想法:0美元 谢谢! Reto可能有更好的方法来实现这一点,但由于我不知道有这样的方法,我可能会修改script/server来设置某种环境变量 然后我会让我的初始值设定项检查该环境变量。因为有多个应用程序服务器,每个应用程序

在Rails中,在initializer/environment.rb中,如果webapp本身正在加载(脚本/服务器),那么使用什么样的方式来确定

所有初始化器都是为迁移脚本/控制台和其他rails任务加载的,但在我的例子中,只有在服务器本身初始化时才需要加载一些东西

我的想法:0美元

谢谢!
Reto

可能有更好的方法来实现这一点,但由于我不知道有这样的方法,我可能会修改script/server来设置某种环境变量


然后我会让我的初始值设定项检查该环境变量。

因为有多个应用程序服务器,每个应用程序服务器都有自己的初始化策略,我建议可靠地连接到服务器启动过程的唯一方法:ActionController::Dispatcher

调度器有一些回调;即:

  • prepare\u dispatch
    (添加了
    以\u prepare
  • 发送前
  • 调度后的
“准备”回调在开发模式下的每个请求之前运行,在生产模式下的第一个请求之前运行。Rails配置对象允许您通过自己的
方法将此类回调添加到\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美元。无论如何谢谢你!没有关系!它工作得非常好,愚蠢的我在错误的位置放置了一个“放置”“已发送已加载”;)。谢谢