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

hec*_*hec 5 deployment environment ruby-on-rails vps capistrano3

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

bundle exec cap production deploy
Run Code Online (Sandbox Code Playgroud)

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

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

rails console
Rails.env
Run Code Online (Sandbox Code Playgroud)

我得到的答案是"发展",这是非常可怕的.

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

rails db
Run Code Online (Sandbox Code Playgroud)

我收到一条错误,指出未创建mydatabase_development.

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

tad*_*man 6

请记住,rails console根据您的环境RAILS_ENVRACK_ENV在您的环境中参与当前环境.如果您没有在服务器上明确设置它,那么它可能默认为development.

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

export RAILS_ENV=production
Run Code Online (Sandbox Code Playgroud)

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

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

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

set :linked_files, %w[
  config/database.yml
]
Run Code Online (Sandbox Code Playgroud)

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

您的网站可能正常的原因是因为像Passenger这样的启动器会自动设置RACK_ENVproduction除非另行配置.但是,这不会影响您的shell,默认情况下development.