生产服务器上的Rails控制台与服务器差异

7

将一个非常基本的Rails 3.2.3试验站部署到一个“生产”服务器上(幸好并不真正投入生产使用),使用RVM Ruby 1.9.3-p194,我发现这里列出的命令具有以下特点:

╔══════════════════════════════════════╤═══╗
║ command issued                       │OK?║
╟──────────────────────────────────────┼───╢
║ bundle exec rails console            │ N ║
║ bundle exec rails console production │ Y ║
║ bundle exec rails server             │ Y ║
║ bundle exec rails server production  │ N ║
╚══════════════════════════════════════╧═══╝
我的第一个问题:这是预期的吗?(我本以为右列中的模式应该是N-Y-N-Y)。
更多信息:在服务器上未安装sqlite3 gem的原因下,bundle exec rails console会失败。然而,bundle exec rails server production出现了一个不太容易理解的跟踪错误。
$ bundle exec rails server production
Exiting
/home/spkspike/www/spike.sampablokuper.com/releases/20120530134819/vendor/ruby/1.9.1/gems/rack-1.4.1/lib/rack/handler.rb:63:in `require': cannot load such file -- rack/handler/production (LoadError)
from /home/spkspike/www/spike.sampablokuper.com/releases/20120530134819/vendor/ruby/1.9.1/gems/rack-1.4.1/lib/rack/handler.rb:63:in `try_require'
from /home/spkspike/www/spike.sampablokuper.com/releases/20120530134819/vendor/ruby/1.9.1/gems/rack-1.4.1/lib/rack/handler.rb:16:in `get'
from /home/spkspike/www/spike.sampablokuper.com/releases/20120530134819/vendor/ruby/1.9.1/gems/rack-1.4.1/lib/rack/server.rb:269:in `server'
from /home/spkspike/www/spike.sampablokuper.com/releases/20120530134819/vendor/ruby/1.9.1/gems/railties-3.2.3/lib/rails/commands/server.rb:59:in `start'
from /home/spkspike/www/spike.sampablokuper.com/releases/20120530134819/vendor/ruby/1.9.1/gems/railties-3.2.3/lib/rails/commands.rb:55:in `block in <top (required)>'
from /home/spkspike/www/spike.sampablokuper.com/releases/20120530134819/vendor/ruby/1.9.1/gems/railties-3.2.3/lib/rails/commands.rb:50:in `tap'
from /home/spkspike/www/spike.sampablokuper.com/releases/20120530134819/vendor/ruby/1.9.1/gems/railties-3.2.3/lib/rails/commands.rb:50:in `<top (required)>'
from script/rails:6:in `require'
from script/rails:6:in `<main>'

我的第二个问题是:如何最好地排除此错误?
2个回答

18

你不想使用生产环境来启动服务器吗?

rails server -e production

在Rails中,rails console环境和rails server -e环境语法上的区别有点让人头痛。


对于轻量级服务器,这是正确的...另外,对于Webrick,您需要运行RAILS_ENV=production rails s。 - Sumit Munot

3
在控制台生产环境中,需要指定环境;而在服务器中,则需要指定其他内容(可能是要使用的服务器,如 webrick/...)。
因此,如果要指定环境,请执行以下操作:
ENV=production rails server

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接