我在生产环境中有一个Rails应用程序,因此我想在部署到生产环境之前使用Capistrano
将其应用程序部署到Staging,因此我的团队已在不同的主机上复制了该应用程序的副本分期。我有2个单独的Capistrano环境设置,一个用于生产,另一个用于暂存。它们实际上因服务器的IP地址而异,其余的是相同的标准设置。
我还添加了config/evironments/staging.rb
文件,该文件与config.environments/production.rb
非常相似,唯一的区别是
config.action_controller.asset_host
由于登台,我需要从登台主机加载资产。
config.action_controller.asset_host = "my_production_host"
config.action_controller.asset_host = "my_staging_host"
但是在执行bundle exec cap staging deploy
并检查浏览器控制台后,我可以看到错误404 Failed to load resource
,并且由于某种原因它指向生产主机资产。
404 Failed to load resource
<link rel="stylesheet" media="all" href="https://my_prduction_host/assets/application-7d22d41de3a16146e566368364a8b2c769a9ebd68d1333e71d624250fa2fd187.css" />
所以看来它没有读我的config/environments/staging.rb
。
server "1.2.3.4", user: "my_user", roles: %w{app db web}, port: 50022
set :stage, :staging
set :rails_env, :staging
Capistrano日志显示current release: current (production)
config/environments/staging.rb
已添加到存储库中,为什么它不读取我的登台配置?我想念什么?知道为什么它要在生产模式下运行该应用程序吗?
答案 0 :(得分:1)
Capistrano没有设置RAILS_ENV,您可能需要在应用程序服务器级别进行配置,例如:
root /home/www/public/app-name/current/public;
passenger_ruby /home/app-name/.rbenv/shims/ruby;
passenger_app_env staging;
passenger_enabled on;
(这是一个Passenger + nginx配置,但是其他应用程序也会存在类似设置)
此处passenger_app_env
告诉旅客使用登台环境加载应用程序。
答案 1 :(得分:0)
您应该在登台服务器上添加RAILS_ENV环境变量。有关更多信息,请参见此处:https://askubuntu.com/a/58828/369247
仅为当前shell设置变量: VARNAME =“我的价值” 要将其设置为当前外壳,并且所有进程都从当前外壳开始: export VARNAME =“我的值”#较短,移植性较差的版本 要为以后的所有bash会话永久设置该行,请将此行添加到$ HOME目录中的.bashrc文件中。
答案 2 :(得分:0)
我知道了。我必须将rails_env staging;
添加到/etc/nginx/sites-available/my_site
并重新启动Nginx。