Capistrano-将Rails应用程序部署到暂存

时间:2018-11-25 19:19:52

标签: ruby-on-rails capistrano

我在生产环境中有一个Rails应用程序,因此我想在部署到生产环境之前使用Capistrano将其应用程序部署到Staging,因此我的团队已在不同的主机上复制了该应用程序的副本分期。我有2个单独的Capistrano环境设置,一个用于生产,另一个用于暂存。它们实际上因服务器的IP地址而异,其余的是相同的标准设置。

我还添加了config/evironments/staging.rb文件,该文件与config.environments/production.rb非常相似,唯一的区别是

config.action_controller.asset_host

由于登台,我需要从登台主机加载资产。

config / environments / production.rb

config.action_controller.asset_host = "my_production_host"

config / environments / staging.rb

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

config / deploy / 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已添加到存储库中,为什么它不读取我的登台配置?我想念什么?知道为什么它要在生产模式下运行该应用程序吗?

更新

3 个答案:

答案 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。

相关问题