轨道 4:Capistrano 开发环境而不是生产环境?
-
21-12-2019 - |
题
我正在将 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_ENV
到 production
除非另有配置。不过,这不会影响您的 shell,默认情况下 development
.