当我使用rails s -e [env]
运行Rails服务器时,我看到了一些奇怪的行为(为了强调而添加了双**):
~/app> rails s -e=**production**# << ok...v
=> Booting Mongrel # v huh?
=> Rails 3.1.1 application starting in **test** on http://0.0.0.0:3000
=> Call with -d to detach
=> Ctrl-C to shutdown server
^CExiting
~/app> rails s -e=**development**
=> Booting Mongrel
=> Rails 3.1.1 application starting in **test** on http://0.0.0.0:3000
=> Call with -d to detach
=> Ctrl-C to shutdown server
^CExiting
~/app> RAILS_ENV=**development** rails s
=> Booting Mongrel
=> Rails 3.1.1 application starting in **development** on http://0.0.0.0:3000
=> Call with -d to detach
=> Ctrl-C to shutdown server
^CExiting
~/app> RAILS_ENV=**production** rails s
=> Booting Mongrel
=> Rails 3.1.1 application starting in **production** on http://0.0.0.0:3000
=> Call with -d to detach
=> Ctrl-C to shutdown server
结果是-e
开关被忽略。
Rails guide未提及任何会被覆盖的情况。命令行帮助说-e Specifies the environment to run this server under test/development/production).
好的。
我真的认为这几周前工作正常(自从我在那个盒子上开始生产服务器以来已经有一段时间了)所以我可能已经改变了打破这个的东西,但是什么?我检查过我使用的地方=
而不是==
,但没找到任何地方。不要思考来解释这一点。
更新:约翰正确地指出它是-e [env]
。我首先尝试使用相同的结果然后尝试-e=[env]
。正确的方法(仍然产生不正确的结果):
~/app> rails s -e production -p 5000
=> Booting Mongrel ^^^^^^^^^ vvvv
=> Rails 3.1.1 application starting in test on http://0.0.0.0:5000
=> Call with -d to detach
=> Ctrl-C to shutdown server
答案 0 :(得分:1)
检查您是否设置了RAILS_ENV
环境变量,因为它将覆盖您作为命令行选项传递的任何内容。
rails source的相关位是这个
ENV["RAILS_ENV"] ||= options[:environment]
从命令行参数填充 options
,因此如果已设置RAILS_ENV
,则命令行选项无效。
答案 1 :(得分:0)
它是rails s -e <env>
,而不是rails s -e=<env>
。注意-e
与环境名称之间的空格:
#Ψ rails s -e production
#=> Booting WEBrick vvvvvvvvvv
#=> Rails 3.1.1 application starting in production on http://0.0.0.0:3000
^^^^^^^^^^
#Ψ rails s -e staging
#=> Booting WEBrick vvvvvvv
#=> Rails 3.1.1 application starting in staging on http://0.0.0.0:3000
^^^^^^^