Ruby on rails Capistrano-部署Rails应用程序到暂存
我在生产中有一个Rails应用程序,我想在开始生产之前使用Ruby on rails Capistrano-部署Rails应用程序到暂存,ruby-on-rails,capistrano,Ruby On Rails,Capistrano,我在生产中有一个Rails应用程序,我想在开始生产之前使用Capistrano将我的应用程序部署到Staging,因此我的团队已经在不同的主机上制作了应用程序的副本,该主机应该用作Staging。我有两个单独的Capistrano环境设置,一个用于生产,另一个用于暂存。它们实际上因服务器的IP地址不同而不同,其余的都是相同的标准设置 我还添加了config/evironments/staging.rb文件,它与config.environments/production.rb非常相似,唯一的区别
Capistrano
将我的应用程序部署到Staging,因此我的团队已经在不同的主机上制作了应用程序的副本,该主机应该用作Staging。我有两个单独的Capistrano环境设置,一个用于生产,另一个用于暂存。它们实际上因服务器的IP地址不同而不同,其余的都是相同的标准设置
我还添加了config/evironments/staging.rb
文件,它与config.environments/production.rb
非常相似,唯一的区别是
config.action_controller.asset_host
因为在登台时,我需要从登台主机加载资产
config/environments/production.rb
config/environments/staging.rb
但是,在我执行bundle exec cap staging deploy
并检查浏览器控制台后,我可以看到一个错误404未能加载资源
,它出于某种原因指向生产主机资产。
404无法加载资源
<link rel="stylesheet" media="all" href="https://my_prduction_host/assets/application-7d22d41de3a16146e566368364a8b2c769a9ebd68d1333e71d624250fa2fd187.css" />
Capistrano日志显示当前版本:当前(生产)
config/environments/staging.rb
被添加到repo中,为什么它不读取我的staging配置?我错过了什么?知道它为什么以生产模式运行应用程序吗
更新Capistrano没有设置RAILS\u 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\u app\u env
告诉乘客使用暂存环境加载应用程序 您应该在登台服务器上添加RAILS_ENV环境变量。有关更多信息,请参见此处:
要仅为当前外壳设置变量,请执行以下操作:
VARNAME=“我的价值”
要为当前shell和从当前shell启动的所有进程设置它,请执行以下操作:
export VARNAME=“my value”#更短、更不便于携带的版本
要为将来的所有bash会话永久设置该行,请将该行添加到$HOME目录中的.bashrc文件中
我已经弄明白了。我不得不添加
rails\u env staging
到/etc/nginx/sites available/my_site
并重新启动nginx。这不起作用。实际上,它完全破坏了应用程序。在部署后访问页面后,我收到502错误代码。很遗憾,它破坏了应用程序。不确定你做错了什么,也许你复制了路径,但没有根据自己的情况进行更改,但重要的是,passenger\u app\u env staging代码>,相当于rails\u env staging代码>,请看:是的,它不起作用。所做的工作是rails_env登台;这不是我第一次在乘客现场看到错误的文件。他们关于如何使用passenger安装nginx的全部教程完全是错误的,根本不起作用。此外,Capistrano没有提到RAILS_ENV应该手动设置。他们实际上说要在deploy/#{environment}.rb文件中设置它?独角兽彪马你能添加完整的capistrano部署日志吗?我使用的是Passenger+Nginx。我不希望粘贴部署日志,因为它包含敏感信息,如IP地址等。但他们明确表示,出于某种原因,应用程序在生产模式下运行。请检查passenger\u app\u env值。此处的更多信息:Passenger将默认值设置为production代码>在任何nginx配置文件中,我都看不到passenger\u app\u env
varset在nginx配置文件中将其设置为staging。
<link rel="stylesheet" media="all" href="https://my_prduction_host/assets/application-7d22d41de3a16146e566368364a8b2c769a9ebd68d1333e71d624250fa2fd187.css" />
server "1.2.3.4", user: "my_user", roles: %w{app db web}, port: 50022
set :stage, :staging
set :rails_env, :staging
root /home/www/public/app-name/current/public;
passenger_ruby /home/app-name/.rbenv/shims/ruby;
passenger_app_env staging;
passenger_enabled on;