【发布时间】:2019-04-27 12:02:44
【问题描述】:
我有一个用于生产的 Rails 应用程序,我想在推出生产环境之前使用 Capistrano 将我的应用程序部署到 Staging,因此我的团队在不同的主机上制作了该应用程序的副本,该应用程序应该充当 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 已添加到存储库中,为什么它不读取我的暂存配置?我错过了什么?知道为什么它在生产模式下运行应用程序吗?
更新
【问题讨论】:
-
你用的是什么服务器?独角兽?彪马?你能添加完整的 capistrano 部署日志吗?
-
我正在使用Passenger + Nginx。我宁愿不粘贴部署日志,因为它包含敏感信息,例如 IP 地址等,但他们清楚地说应用程序出于某种原因在生产模式下运行。
-
检查passenger_app_env 值。更多信息在这里:phusionpassenger.com/library/config/nginx/reference/…
Passenger sets the default value to production. -
我在任何 nginx 配置文件中都没有看到
passenger_app_envvar -
将它设置为在你的 nginx 配置文件中暂存。