【发布时间】:2013-12-07 07:27:31
【问题描述】:
我正在尝试自动配置我的 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 不可用吗?
获得相同结果的替代方案确实非常受欢迎。
【问题讨论】:
-
@Gopalrathore 我看不出它如何改变端口。你能再解释一下吗?这是否意味着“只有在不生产时才这样做”?
-
只是为生产环境设置一个端口,开发时默认使用3000。
-
它对你有用吗? ...实际上我没有测试它。
-
您删除了代码,我无法尝试。无论如何,我想做相反的事情:生产端口为 3000,其他环境为 3500。
-
也许代替
Rails.env.production?类似:(ENV['RAILS_ENV'] || 'development') == 'production'
标签: ruby-on-rails ruby-on-rails-4 environment-variables boot