Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/58.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails Capistrano-部署Rails应用程序到暂存_Ruby On Rails_Capistrano - Fatal编程技术网

Ruby on rails Capistrano-部署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非常相似,唯一的区别

我在生产中有一个Rails应用程序,我想在开始生产之前使用
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;