Gem 不会通过 config.ru 加载
Posted
技术标签:
【中文标题】Gem 不会通过 config.ru 加载【英文标题】:Gem does not load over config.ru 【发布时间】:2013-04-17 17:06:03 【问题描述】:我有自己的宝石“RocketRuby”。我将它加载到 irb 中,它可以加载它。在早期版本中,我的 config.ru 中也有它,并且它有效。
现在我再次编译并再次安装它。然后(它仍然可以通过将其加载到 irb 中)乘客崩溃并告诉我:
cannot load such file -- rocketruby (LoadError)
/usr/lib/ruby/1.9.1/rubygems/custom_require.rb:60:in `require'
/usr/lib/ruby/1.9.1/rubygems/custom_require.rb:60:in `rescue in require'
/usr/lib/ruby/1.9.1/rubygems/custom_require.rb:35:in `require'
config.ru:1:in `block in <main>'
/var/lib/gems/1.9.1/gems/rack-1.5.2/lib/rack/builder.rb:55:in `instance_eval'
/var/lib/gems/1.9.1/gems/rack-1.5.2/lib/rack/builder.rb:55:in `initialize'
config.ru:1:in `new'
config.ru:1:in `<main>'
/var/lib/gems/1.9.1/gems/passenger-4.0.0.rc6/helper-scripts/rack-preloader.rb:82:in `eval'
/var/lib/gems/1.9.1/gems/passenger-4.0.0.rc6/helper-scripts/rack-preloader.rb:82:in `preload_app'
/var/lib/gems/1.9.1/gems/passenger-4.0.0.rc6/helper-scripts/rack-preloader.rb:127:in `<module:App>'
/var/lib/gems/1.9.1/gems/passenger-4.0.0.rc6/helper-scripts/rack-preloader.rb:6:in `<module:PhusionPassenger>'
/var/lib/gems/1.9.1/gems/passenger-4.0.0.rc6/helper-scripts/rack-preloader.rb:5:in `<main>'
config.ru 如下所示:
require "rocketruby"
require "./shop_of_one.rb"
ShopOfOne.instance
run RocketRuby::RackApplication.new
非常奇怪的是,虽然出现此错误,但在 irb require "rocketruby"
中仍然有效。
有什么帮助吗?
【问题讨论】:
您的应用程序以什么用户身份运行?您可以在 Phusion 乘客错误页面中看到这一点。正在运行的用户是您所期望的吗?还要检查那个错误页面上的 Ruby 加载路径。是你所期望的吗? 【参考方案1】:Passenger 以它自己的用户身份运行,即使是它所加载的 apache
用户也不共享环境。这意味着您的 gem 在尝试运行时可能没有安装。
使用 bundler 可以解决这个问题,我相信还有其他方法,但是添加一个 Gemfile,运行 bundle install --deployment
并添加这个:
require 'rubygems'
require 'bundler'
Bundler.require
到您的机架应用程序的顶部将解决问题。
【讨论】:
以上是关于Gem 不会通过 config.ru 加载的主要内容,如果未能解决你的问题,请参考以下文章