我正在尝试自动配置我的rails应用程序,我希望能够在不指定端口的情况下启动应用程序,因为我希望根据环境选择它。
具体而言(开始时很简单)如果环境正在生产,则在端口3000上运行应用程序,否则在端口3500上运行。
所以,按照这个答案,我在boot.rb文件中添加了以下内容:
require 'rails/commands/server'
module DefaultOptions
def default_options
super.merge!(Port: Rails.env.production? ? 3000 : 3500)
end
end
Rails::Server.send(:prepend, DefaultOptions)
不幸的是我做错了,因为这是我运行rails s
时的输出:
/home/luca/projects/ads_manager/config/boot.rb:10:in `default_options': undefined method `env' for Rails:Module (NoMethodError)
from /usr/local/lib/ruby/gems/2.0.0/gems/rack-1.5.2/lib/rack/server.rb:287:in `parse_options'
from /usr/local/lib/ruby/gems/2.0.0/gems/rack-1.5.2/lib/rack/server.rb:184:in `options'
from /usr/local/lib/ruby/gems/2.0.0/gems/railties-4.0.0/lib/rails/commands/server.rb:58:in `set_environment'
from /usr/local/lib/ruby/gems/2.0.0/gems/railties-4.0.0/lib/rails/commands/server.rb:42:in `initialize'
from /usr/local/lib/ruby/gems/2.0.0/gems/railties-4.0.0/lib/rails/commands.rb:73:in `new'
from /usr/local/lib/ruby/gems/2.0.0/gems/railties-4.0.0/lib/rails/commands.rb:73:in `<top (required)>'
from bin/rails:4:in `require'
from bin/rails:4:in `<main>'
知道为什么Rails.env不可用?
获得相同结果的替代方案确实非常受欢迎。
答案 0 :(得分:2)
如果您使用的是* NIX系统,可以尝试以下
在您的终端中运行以下命令
export RAILS_ENV=production
注意: 这会暂时将环境设置为生产环境,如果您需要永久保存,请将其添加到.bashrc文件
然后启动您的应用程序服务器。
在boot.rb文件中,使用ENV['RAILS_ENV']
代替Rails.env
希望这有帮助。
答案 1 :(得分:2)
我会尝试将您的解决方案只需将Rails.env.production?
更改为ENV["RAILS_ENV"] != "production"
,然后就可以了:)所以:
require 'rails/commands/server'
module DefaultOptions
def default_options
super.merge!(Port: ENV["RAILS_ENV"] == "production" ? 3000 : 3500)
end
end
Rails::Server.send(:prepend, DefaultOptions)
答案 2 :(得分:1)
Rails.env稍后在rails启动过程中设置,您可以尝试检查ENV [“RAILS_ENV”]吗?