Rem*_*anu 11 ruby rake ruby-on-rails eventmachine
我正在使用EventMachine和Monetarily来启动e TCP服务器以及我的rails应用程序.这是从config/initializers/momentarily.rb.
我的问题是,当我运行rake任务时,它也会启动db:migrate.我只想在启动HTTP服务器时启动它.环境无济于事,因为服务器启动和rake任务都在开发环境下.有没有办法知道应用程序正在运行HTTP服务器而不是其他任何东西?请注意,不仅是rake任务,如果我运行rails控制台,EM也会启动,这对我的情况来说也是不可取的.
在config.ru文件中设置一个环境变量,并在代码中的任何地方使用它来检测它是否rails server仅使用命令执行。
例如
文件: config.ru
ENV['server_mode'] = '1'
Run Code Online (Sandbox Code Playgroud)并在某处使用它:
文件: config/environment.rb
Thread.new { infinite_loop! }.join if ENV['server_mode'] = '1'
Run Code Online (Sandbox Code Playgroud)参考:答案
unless File.basename($0) == "rake" && ARGV.include?("db:migrate")
# you are not in rake db:migrate
end
Run Code Online (Sandbox Code Playgroud)
我知道,这并不是一个很好的方法.您可以复制NewRelic的的方法(检查discover_dispatcher中local_environment.rb),它主要有使用如果是乘客里面,薄等运行检测启发式名单
对于乘客,它检查
defined?(::PhusionPassenger)
Run Code Online (Sandbox Code Playgroud)
为了瘦它检查
if defined?(::Thin) && defined?(::Thin::Server)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2493 次 |
| 最近记录: |