Rails:服务器启动时如何运行代码,但运行rake任务或控制台时不运行代码?

时间:2018-11-12 08:25:36

标签: ruby-on-rails initialization rake

之前,我将代码添加到名为config/initializers/remote_publishers.rb的文件中,该文件在服务器启动时使用Bunny gem建立了与RabbitMQ的连接。

但是,现在在运行rails crails g model SomeModel foo:integerrails db:migrate等时也会执行此操作。

对于此应用程序,仅当使用rails s(erver)启动rails时,RabbitMQ连接才有意义。

有条件执行此代码的正确方法是什么?有没有办法查看Rails是作为服务器启动还是仅作为任务运行器启动?

1 个答案:

答案 0 :(得分:2)

您正在使用什么Web服务器?例如,在Puma上,您可以使用

on_worker_boot do
  # Establish RabbitMQ connection
end

另一种可能是在初始化程序中检查if defined?(Rails::Server):仅当在Web服务器的上下文中运行时,才应如此。