【问题标题】:Apache-Passenger can't start my production rails applicationApache-Passenger 无法启动我的生产 Rails 应用程序
【发布时间】:2015-12-08 10:43:36
【问题描述】:

我是部署 Rails 应用程序的新手,对于我在许多网站上看到的内容,Apache/Passenger 组合是最简单的组合之一;但是我遇到乘客不想启动我的应用程序并在输入 sudo tail -50 /var/log/apache2/error.log 时显示以下错误消息 命令:

Could not spawn process for application /home/test/Documents/sites/depot:
An error occured while starting up the preloader.
Message from application: cannot load such file -- bundler/setup (LoadError)
/usr/lib/ruby/2.0.0/rubygems/core_ext/kernel_require.rb:53:in `require'
/usr/lib/ruby/2.0.0/rubygems/core_ext/kernel_require.rb:53:in `require'
/usr/lib/ruby/vendor_ruby/phusion_passenger/loader_shared_helpers.rb:406:in
`activate_gem'
...
age/Cor/Req/CheckoutSession.cpp:252 ]: [Client 1-1] Cannot checkout session
because a spawning error occurred. The identifier of the error is 6ce15bbe.
Please see earlier logs for details about the error.

我怀疑这与我的 ruby​​ 安装有关,我使用 rbenv 并获得了 2.2.3 版本,但在错误消息中它链接到我从未安装过的 2.0.0 版本。 我也怀疑这与我使用另一个指南中的这两个命令有关:

 sudo rm /usr/bin/ruby
 sudo ln -s /usr/local/bin/ruby /usr/bin/ruby

https://www.digitalocean.com/community/tutorials/how-to-deploy-a-rails-app-with-passenger-and-apache-on-ubuntu-14-04

如果有人知道如何解决这个令人头疼的问题,我将不胜感激。

谢谢!

【问题讨论】:

  • gem install bundler了吗?
  • @CamdenNarzt 是的,安装好了,同样的错误信息。
  • 那么 dimakura 可能在正确的路径上,您需要将 PassengerDefaultRuby 设置为 rbenv 中可能位于 ~/.rbenv/shims/ruby 下的 ruby​​ shim 的路径。
  • @CamdenNarzt 更改了 Passenger.conf 文件中的 PassengerDefaultRuby,这确实将我的错误消息中的 ruby​​ 版本更改为 2.2.3 ;但是,我现在在浏览器中收到“从应用程序收到的不完整响应”消息,并且在我看到的日志中:(缺少 secret_tokensecret_key_base 用于“生产”环境,在 config/secrets.yml 中设置这些值)我认为我即将解决这个问题(希望如此)
  • 现在只需在 /etc/apache2/envvars 中设置变量

标签: ruby-on-rails ruby apache passenger


【解决方案1】:

您可能需要在您的httpd.conf 文件中指定正确的PassengerDefaultRuby

我的建议是使用他们的官方指南安装乘客:

https://www.phusionpassenger.com/library/install/apache/

【讨论】:

  • 感谢@dimakura 提供的线索,我浏览了指南中的项目,安装了一些我应该缺少的依赖项,但仍然出现完全相同的错误=/ubuntu 14.04 上的 Apache2 不使用 httpd。 conf 了,我会在apache2.conf 中添加PassengerDefaultRuby 吗?
  • 不要编辑PassengerDefaultRuby。改为编辑PassengerRuby。请参阅我对@Zero 的评论。
【解决方案2】:

在@dimakura 和@CamdenNarzt 留下一些线索后,我分两个阶段解决了这个问题。

  1. 由于我怀疑Passenger 使用了错误的ruby 版本,为了解决这个问题,我修改了位于/etc/apache2/mods-available/ 下的passenger.conf 文件,其输出为which ruby​​命令:

添加行(替换为您自己的 which ruby​​ 输出)

PassengerRuby /home/test/.rbenv/shims/ruby
  1. 重新启动的 apache 收到“从应用程序收到不完整的响应”错误消息,检查日志并注意到现在正在使用正确版本的 ruby​​,但收到错误消息:

    “‘生产’环境缺少 secret_token 和 secret_key_base,请在 config/secrets.yml 中设置这些值”

按照此站点上的说明安装 Figaro gem:https://www.twilio.com/blog/2015/02/managing-development-environment-variables-across-multiple-ruby-applications.html 然后使用命令生成密钥:

rake secret

复制输出并打开我输入的 config/application.yml 文件:

SECRET_KEY_BASE: [output key from rake secret command]

重启了 Apache,它工作了!!

【讨论】:

  • 不要那样做!您应该自定义PassengerRuby,而不是PassengerDefaultRuby。保留PassengerDefaultRuby 的原始值。阅读文档以了解PassengerRuby 和PassengerDefaultRuby 之间的区别。
  • 谢谢@Hongli 我已经添加了一个PassengerRuby 行并保留PassengerDefaultRuby 的原始值。
  • 我认为每次有人打开服务器的 shell 登录时更改 secret_key_base 不是一个好主意,而且我认为对于同一台服务器共享secret_key_base。如果您创建文件config/secrets.yml 并在文件中设置值会更好。还要记住不要将文件提交到存储库。
  • 使用rbenv-vars你可以将你的ENV变量存储在你项目根目录的.rbenv-vars中:echo "SECRET_KEY_BASE=`rake secret`" >> /path/to/project/root/.rbenv-vars然后使用ENV['SECRET_KEY_BASE']将它拉到你的配置中。
  • 您必须编辑/etc/profile.d/st_env.sh 文件并删除您添加的内容。然后将其移至.rbenv-vars。然后用 Figaro 拉入变量。
猜你喜欢
  • 2013-01-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多