在Rails 3中需要rack/openid的问题[本机需要正常工作]

Pav*_*lov 7 rack ruby-on-rails ruby-on-rails-plugins ruby-on-rails-3

我安装插件open_id_authentication并出现此错误:

/usr/lib/ruby/gems/1.9.1/gems/activesupport-3.0.0.beta/lib/active_support/dependencies.rb:167:in `require': no such file to load -- rack/openid (LoadError)
Run Code Online (Sandbox Code Playgroud)

当我尝试启动时rails server ,在我的系统中安装了rack-openid,我可以从irb加载它:

irb(main):001:0> require 'rack/openid'
=> true
Run Code Online (Sandbox Code Playgroud)

我尝试像使用ruby-openid一样添加hack到Gemfile,但它没有帮助:

gem "ruby-openid", :require => "openid"
gem "rack-openid", :require => "rack/openid"
Run Code Online (Sandbox Code Playgroud)

我也试过了

gem "ruby-openid", :require => "rack/openid"
Run Code Online (Sandbox Code Playgroud)

但:

/usr/lib/ruby/gems/1.9.1/gems/bundler-0.9.7/lib/bundler/runtime.rb:38:in `require': no such file to load -- rack/openid (LoadError)
Run Code Online (Sandbox Code Playgroud)

在rails 2.3.5 app中没有这个问题,我无法理解为什么它会在Rails 3中发生.

epo*_*olf 7

问题是这个代码位于插件的init.rb顶部

if Rails.version < '3'
  config.gem 'rack-openid', :lib => 'rack/openid', :version => '>=0.2.1'
end
Run Code Online (Sandbox Code Playgroud)

Bundler似乎没有接受宝石的要求,所以你错过了rack-openid宝石.

解决方案是将以下内容添加到您Gemfile的位置ruby-openid.(rack-openid取决于ruby-openid但宝石知道这一点,并将根据需要安装它)

gem 'rack-openid', '>=0.2.1', :require => 'rack/openid'
Run Code Online (Sandbox Code Playgroud)

不要忘记bundle install在更新Gemfile后运行.