Rails 4:Capistrano开发环境替代生产环境?

6
我正在使用Capistrano gem将我的Ruby on Rails应用程序部署到虚拟专用服务器的生产环境中。我运行以下命令进行部署:
bundle exec cap production deploy

除了当我尝试检查当前生产发布版本所运行的环境时,一切似乎都运行良好。

我用的一种方法是运行:

rails console
Rails.env

我收到的答案是“发展”,这令人十分恐慌。
在另一次测试中:当我在当前版本中运行以下内容时:
rails db

我得到了一个错误,提示我的数据库mydatabase_development没有被创建。

我的应用程序似乎运行良好,但我不知道这是否会在今后造成重大问题。首先:有没有办法确定我的实际副本是否正在开发中运行?其次:鉴于我有一个问题,如何配置capistrano以部署生产环境?


你在哪个系统上运行 rails console - tadman
在已安装Ubuntu 14.04发行版的VPS上运行rails console。我运行命令的目录是:/var/www/myapp/current/ - hec
1个回答

7

请注意,rails console 的运行环境由当前环境所指定的 RAILS_ENV 或者 RACK_ENV 决定。如果你没有在服务器上明确设置这个参数,那么它可能会默认为 development

解决方法之一是在你的 .bash_profile 或任何你使用的 shell 配置文件中强制设置它。例如:

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


很棒的答案,tadman。谢谢。我需要对我的config/application.yml文件(由figaro gem用于环境变量)执行与config/database.yml文件相同的操作吗? - hec
通常将API密钥、凭据、密码等内容检查到源代码存储库中是一个不好的想法。这些东西应该安全地存储在您的服务器上,除了安全备份之外,不应该出现在其他地方。通常我会创建一个config/database.example.yml文件作为模板,每个开发人员都可以自定义。如果您有application.yml等其他文件,也应该采用同样的方式处理。 - tadman

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