Capistrano - 部署 Rails 应用到暂存
Capistrano - deployment Rails app to Staging
我在生产环境中有一个 Rails 应用程序,我想在推出生产环境之前使用 Capistrano
将我的应用程序部署到暂存区,以便我的团队在不同的主机上制作应用程序的副本这应该充当暂存。我有 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 没有设置 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的配置,其他app也会有类似的设置)
这里 passenger_app_env
告诉 Passenger 在使用暂存环境时加载应用程序。
您应该在暂存服务器上添加 RAILS_ENV 环境变量。有关详细信息,请参阅此处:https://askubuntu.com/a/58828/369247
To set variable only for current shell:
VARNAME="my value"
To set it for current shell and all processes started from current shell:
export VARNAME="my value" # shorter, less portable version
To set it permanently for all future bash sessions add such line to your .bashrc file in your $HOME directory.
我想通了。我必须将 rails_env staging;
添加到 /etc/nginx/sites-available/my_site
并重新启动 Nginx。
我在生产环境中有一个 Rails 应用程序,我想在推出生产环境之前使用 Capistrano
将我的应用程序部署到暂存区,以便我的团队在不同的主机上制作应用程序的副本这应该充当暂存。我有 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 没有设置 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的配置,其他app也会有类似的设置)
这里 passenger_app_env
告诉 Passenger 在使用暂存环境时加载应用程序。
您应该在暂存服务器上添加 RAILS_ENV 环境变量。有关详细信息,请参阅此处:https://askubuntu.com/a/58828/369247
To set variable only for current shell: VARNAME="my value" To set it for current shell and all processes started from current shell: export VARNAME="my value" # shorter, less portable version To set it permanently for all future bash sessions add such line to your .bashrc file in your $HOME directory.
我想通了。我必须将 rails_env staging;
添加到 /etc/nginx/sites-available/my_site
并重新启动 Nginx。