Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails Rails 4:根据环境使用不同的服务器端口_Ruby On Rails_Ruby On Rails 4_Environment Variables_Boot - Fatal编程技术网

Ruby on rails Rails 4:根据环境使用不同的服务器端口

Ruby on rails Rails 4:根据环境使用不同的服务器端口,ruby-on-rails,ruby-on-rails-4,environment-variables,boot,Ruby On Rails,Ruby On Rails 4,Environment Variables,Boot,我正在尝试自动配置rails应用程序,我希望能够在不指定端口的情况下启动应用程序,因为我希望根据环境选择端口 具体来说(一开始很简单),如果环境是生产环境,则在端口3000上运行应用程序,否则在端口3500上运行应用程序 因此,根据这个答案,我在boot.rb文件中添加了以下内容: require 'rails/commands/server' module DefaultOptions def default_options super.merge!(Port: Rails.en

我正在尝试自动配置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>'
/home/luca/projects/ads_manager/config/boot.rb:10:in'default_options':Rails:Module(NoMethodError)的未定义方法'env'
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'
来自/usr/local/lib/ruby/gems/2.0.0/gems/railties-4.0.0/lib/rails/commands/server.rb:58:在“set_环境”中
来自/usr/local/lib/ruby/gems/2.0.0/gems/railties-4.0.0/lib/rails/commands/server.rb:42:在“初始化”中
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`'
从箱子/轨道:4:in“require”
从箱子/轨道:4:in`'
知道Rails.env为什么不可用吗


获得相同结果的替代方法确实非常受欢迎。

如果您使用*NIX系统,您可以尝试以下方法

在终端中运行下面的命令

export RAILS\u ENV=production

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

然后启动应用服务器

在boot.rb文件中,使用
ENV['RAILS\u ENV']
而不是
RAILS.ENV


希望这能有所帮助。

Rails.env将在Rails引导过程中稍后设置,您可以尝试检查env[“Rails_env”]吗?

我会尝试您的解决方案,只是将
Rails.env.production?
更改为
env[“Rails_env”!=“生产”
而且它是有效的:)因此:


@Gopallathore我不知道它怎么能改变港口。你能再解释一下吗?这是否意味着“仅当不是生产时才执行此操作”?只需为生产环境设置一个端口,对于开发,将使用默认值3000。它是否正确地适用于u。。。实际上我没有测试它。你删除了代码,我无法尝试。无论如何,我想做相反的事情:3000端口用于生产,3500端口用于其他环境。也许可以代替
Rails.env.production?
类似的东西:
(env['Rails_env']| | development')=='production'
我在本地机器上试用过,效果很好:)顺便说一句,我想知道当你想运行不同的环境时会发生什么(比如生产和发展)在同一台机器上。我想这种方法意味着必须正确设置不同用户的
.bashrc
文件。对吗?将环境添加到
.bashrc
并不是强制的。您也可以在命令中使用它,使用以下方法启动rails服务器
rails\u ENV=development rails s
ye啊,编辑你的答案,包括我的,祝你好运,兄弟!嘿@DeeY,这是一个屏幕截图,显示了我答案的第一个版本。请看一下上面提到的时间戳,然后与你提交答案的时间进行比较。很清楚是谁复制了答案,这是另一个屏幕截图,显示了m的哪些部分这是我编辑过的答案。
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)