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

bundle exec cap production deploy

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

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

rails console
Rails.env

我得到的答案是“发展”,这是相当可怕的。

在另一次测试中:当我在当前版本中运行以下命令时:

rails db

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

我的应用程序似乎运行良好,但我不知道这是否会导致今后出现重大问题。首先:有没有办法确定我的实时副本是否实际上正在开发中运行?第二:鉴于我遇到问题,如何配置 capistrano 来部署生产环境?

有帮助吗?

解决方案

请记住 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_ENVproduction 除非另有配置。不过,这不会影响您的 shell,默认情况下 development.

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top