Rails:如何在服务器启动时 运行 编码,而不是在 运行 rake 任务或控制台时编码?

Rails: How to run code when server starts up, but not when running a rake task or the console?

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

但是,现在在 运行 rails crails g model SomeModel foo:integerrails db:migrate

时也会执行此操作

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

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

您使用的是什么网络服务器?例如,在 Puma 上,您可以使用

on_worker_boot do
  # Establish RabbitMQ connection
end

另一种可能是在您的初始值设定项中检查 if defined?(Rails::Server):只有当 运行 在 Web 服务器的上下文中时才应为真。