Rails 4:Capistrano开发环境而不是生产?

时间:2014-06-04 21:24:10

标签: ruby-on-rails deployment environment vps capistrano3

我正在使用capistrano gem将我的ruby on rails应用程序的生产环境部署到虚拟专用服务器上。我运行以下命令进行部署:

bundle exec cap production deploy

除非我尝试检查我当前的生产版本在哪个环境中运行,否则一切似乎都运行良好。

我用来检查这个的一种方法是运行:

rails console
Rails.env

我收到的答案是“发展”,这非常可怕。

在另一个测试中:当我在当前版本中运行以下内容时:

rails db

我收到一条错误消息,指出未创建mydatabase_development。

我的应用似乎运行良好,但我不知道这是否会导致重大问题向前发展。首先:有没有办法确定我的实时副本是否真的在开发中运行?其次:鉴于我遇到问题,如何配置capistrano来部署生产环境?

1 个答案:

答案 0 :(得分:6)

请注意,rails console会根据您环境中RAILS_ENVRACK_ENV的规定参与当前环境。如果您未在服务器上明确设置,则可能默认为development

解决此问题的一种方法是在.bash_profile或您正在使用的任何外壳配置文件中强制它。例如:

export RAILS_ENV=production

这应该使它可用,当你使用你的Rails shell时,它将正确启动。

请注意,您甚至无法在生产服务器上以开发模式启动,因为config/database.yml中不应该有一个具有该名称的条目。最佳做法是仅在生产服务器上存储config/database.yml ,并在Capistrano部署期间将其移除。

将此添加到您的config/deploy.rb

set :linked_files, %w[
  config/database.yml
]

然后在shared/config/database.yml中创建一个仅限生产的配置,在部署时将其链接到位。请务必从版本控制系统中排除config/database.yml,以免部署它。

您的网站可能正常的原因是,除非另行配置,否则像Passenger这样的启动器会自动将RACK_ENV设置为production。但这不会影响您的shell,默认为development