【问题标题】:Rails 4: use different server port depending on environmentRails 4:根据环境使用不同的服务器端口
【发布时间】: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


【解决方案1】:

我会尝试您的解决方案,只需将 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】:

    如果你使用*NIX系统,你可以试试下面的

    在您的终端中运行以下命令

    export RAILS_ENV=production

    注意:这会将环境临时设置为生产环境,如果您永久需要,请将其添加到您的 .bashrc 文件中

    然后启动你的应用服务器。

    在 boot.rb 文件中,使用ENV['RAILS_ENV'] 而不是Rails.env

    希望这会有所帮助。

    【讨论】:

    • 我已经在我的本地机器上试过了,它成功了:) 顺便说一句,我想知道当你想在同一台机器上运行不同的环境(比如生产和开发)时会发生什么。我想这种方法意味着不同的用户必须正确设置他们的.bashrc 文件。我说的对吗?
    • 将环境添加到.bashrc 不是强制的。你也可以在命令中使用它来启动你的rails服务器,使用下面的方法RAILS_ENV=development rails s
    • 是的,编辑你的答案,包括我的,要走的路,兄弟!
    • 嘿@DeeY,这是显示我答案的第一个版本的屏幕截图。请查看那里提到的时间戳,然后将其与您提交答案的时间进行比较。很清楚是谁复制了答案bmp.io/noPSTlV
    • 这是另一个屏幕截图,它显示了我编辑的答案的哪些部分。 bmp.io/cuXwGWN
    【解决方案3】:

    Rails.env 在 Rails 启动过程中稍后设置,您可以尝试检查 ENV["RAILS_ENV"] 吗?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-10
      • 1970-01-01
      • 1970-01-01
      • 2016-07-27
      • 1970-01-01
      • 2013-02-20
      • 1970-01-01
      • 2011-01-24
      相关资源
      最近更新 更多