检测应用程序是否作为HTTP服务器启动(rake task,rconsole等)

Rem*_*anu 11 ruby rake ruby-on-rails eventmachine

我正在使用EventMachineMonetarily来启动e TCP服务器以及我的rails应用程序.这是从config/initializers/momentarily.rb.

我的问题是,当我运行rake任务时,它也会启动db:migrate.我只想在启动HTTP服务器时启动它.环境无济于事,因为服务器启动和rake任务都在开发环境下.有没有办法知道应用程序正在运行HTTP服务器而不是其他任何东西?请注意,不仅是rake任务,如果我运行rails控制台,EM也会启动,这对我的情况来说也是不可取的.

Vis*_*hal 7

config.ru文件中设置一个环境变量,并在代码中的任何地方使用它来检测它是否rails server仅使用命令执行。

例如

并在某处使用它:


参考:答案


Tem*_*kov 6

unless File.basename($0) == "rake" && ARGV.include?("db:migrate")
  # you are not in rake db:migrate
end
Run Code Online (Sandbox Code Playgroud)


Fre*_*ung 6

我知道,这并不是一个很好的方法.您可以复制NewRelic的的方法(检查discover_dispatcherlocal_environment.rb),它主要有使用如果是乘客里面,薄等运行检测启发式名单

对于乘客,它检查

defined?(::PhusionPassenger)
Run Code Online (Sandbox Code Playgroud)

为了瘦它检查

if defined?(::Thin) && defined?(::Thin::Server)
Run Code Online (Sandbox Code Playgroud)