2011-04-09 68 views
6

我有在多个服务器上运行的应用程序: - 在开发机器 本地 - 在Heroku - 与男乘客在Nginx的Rails 3:如何检测应用程序是否在服务器模式下运行多个不同的环境?

特定服务器上

我想推出一个特定的代码(装载一些Redis的键)这只在Web服务器启动时才需要。

我已经做了相当多的挖掘,我发现最好的解决方案是在与初始化执行我的代码:

if defined?(Rails::Server) 
    #my code 
end 

这行之有效本地,但似乎滑轨:: Server从不在Heroku或Passanger中定义。

我需要一个适用于任何情况的解决方案,请帮助,这非常重要。

感谢,

亚历

PS:我正在运行的Rails 3.0.4,1.8.7红宝石

回答

2

怎么样?

config.serve_static_assets = (defined?(Mongrel) || defined?(WEBrick)) ? true : false 
8

在config.ru文件把代码可能是检测在不同类型的服务器(麒麟/乘客/ Rails的::服务器的/ etc)服务器模式更稳健的方式。

例如,在轨道根/ config.ru:

# This file is used by Rack-based servers to start the application. 

# ADD this line and read the value later: 
ENV['server_mode'] = '1' 

require ::File.expand_path... 
+1

上述代码将抛出。你想这个ENV ['server_mode'] ='1' – portforwardpodcast 2013-09-04 22:16:15

+1

修复了它。谢谢。几年之后的 – 2013-09-09 18:48:50

+0

..看来Rails在'config.ru'文件之前加载初始化器 – songyy 2017-11-16 02:45:51

相关问题