【问题标题】:Missing a constant on load.. how can i get around this? (Rails::Plugin::OpenID)缺少负载常数..我怎样才能解决这个问题? (Rails::Plugin::OpenID)
【发布时间】:2011-01-03 08:14:07
【问题描述】:

我有一个 Rails 2 项目,我正在尝试升级到 Rails 3,但在使用 bundler 时遇到了一些问题。

当我运行“rake”时,它可以正常运行测试。但是当我运行“bundle exec rake”时,它找不到一个常量。

错误是这样的:

/Users/kimptoc/.rvm/gems/ruby-1.8.7-p330@p-borisbikestats-pre-rails3/gems/activesupport-2.3.9/lib/active_support/dependencies.rb:131:in `const_missing': uninitialized constant Rails::Plugin::OpenID (NameError)
    from /Users/kimptoc/Documents/ruby/borisbikes/borisbikestats.pre3/vendor/plugins/open_id_authentication/init.rb:16:in `evaluate_init_rb'
    from /Users/kimptoc/.rvm/gems/ruby-1.8.7-p330@p-borisbikestats-pre-rails3/gems/activesupport-2.3.9/lib/active_support/callbacks.rb:182:in `call'
    from /Users/kimptoc/.rvm/gems/ruby-1.8.7-p330@p-borisbikestats-pre-rails3/gems/activesupport-2.3.9/lib/active_support/callbacks.rb:182:in `evaluate_method'
    from /Users/kimptoc/.rvm/gems/ruby-1.8.7-p330@p-borisbikestats-pre-rails3/gems/activesupport-2.3.9/lib/active_support/callbacks.rb:166:in `call'
    from /Users/kimptoc/.rvm/gems/ruby-1.8.7-p330@p-borisbikestats-pre-rails3/gems/activesupport-2.3.9/lib/active_support/callbacks.rb:90:in `run'
    from /Users/kimptoc/.rvm/gems/ruby-1.8.7-p330@p-borisbikestats-pre-rails3/gems/activesupport-2.3.9/lib/active_support/callbacks.rb:90:in `each'
    from /Users/kimptoc/.rvm/gems/ruby-1.8.7-p330@p-borisbikestats-pre-rails3/gems/activesupport-2.3.9/lib/active_support/callbacks.rb:90:in `send'
    from /Users/kimptoc/.rvm/gems/ruby-1.8.7-p330@p-borisbikestats-pre-rails3/gems/activesupport-2.3.9/lib/active_support/callbacks.rb:90:in `run'
    from /Users/kimptoc/.rvm/gems/ruby-1.8.7-p330@p-borisbikestats-pre-rails3/gems/activesupport-2.3.9/lib/active_support/callbacks.rb:276:in `run_callbacks'
    from /Users/kimptoc/.rvm/gems/ruby-1.8.7-p330@p-borisbikestats-pre-rails3/gems/actionpack-2.3.9/lib/action_controller/dispatcher.rb:51:in `send'
    from /Users/kimptoc/.rvm/gems/ruby-1.8.7-p330@p-borisbikestats-pre-rails3/gems/actionpack-2.3.9/lib/action_controller/dispatcher.rb:51:in `run_prepare_callbacks'
    from /Users/kimptoc/.rvm/gems/ruby-1.8.7-p330@p-borisbikestats-pre-rails3/gems/rails-2.3.9/lib/initializer.rb:631:in `prepare_dispatcher'
    from /Users/kimptoc/.rvm/gems/ruby-1.8.7-p330@p-borisbikestats-pre-rails3/gems/rails-2.3.9/lib/initializer.rb:185:in `process'
    from /Users/kimptoc/.rvm/gems/ruby-1.8.7-p330@p-borisbikestats-pre-rails3/gems/rails-2.3.9/lib/initializer.rb:113:in `send'
    from /Users/kimptoc/.rvm/gems/ruby-1.8.7-p330@p-borisbikestats-pre-rails3/gems/rails-2.3.9/lib/initializer.rb:113:in `run'
    from /Users/kimptoc/Documents/ruby/borisbikes/borisbikestats.pre3/config/environment.rb:9
    from ./test/test_helper.rb:2:in `require'
    from ./test/test_helper.rb:2

我已经安装了这些 gem:

$ gem list

*** LOCAL GEMS ***

actionmailer (2.3.9)
actionpack (2.3.9)
activerecord (2.3.9)
activeresource (2.3.9)
activesupport (2.3.9)
authlogic (2.1.3)
bundler (1.0.7)
gravtastic (2.2.0)
linecache (0.43)
mocha (0.9.10)
newrelic_rpm (2.13.4)
parseexcel (0.5.2)
rack (1.1.0)
rack-openid (1.1.1)
rails (2.3.9)
rake (0.8.7)
ruby-debug-base (0.10.5.jb2, 0.10.4)
ruby-debug-ide (0.4.15)
ruby-openid (2.1.8, 2.1.7, 2.0.4)
sqlite3-ruby (1.3.2)

打包器 Gemfile 如下:

source 'http://rubygems.org'

#gem 'rails', '3.0.3'
gem "rails", "2.3.9"
gem "activesupport", "2.3.9"
gem "ruby-openid", "2.1.7", :require => "openid"
#gem "authlogic-oid", "1.0.4"

# Bundle edge Rails instead:
# gem 'rails', :git => 'git://github.com/rails/rails.git'

gem 'sqlite3-ruby', :require => 'sqlite3'

gem "authlogic", "= 2.1.3"
gem "newrelic_rpm"
#  gem "facebooker"
gem "parseexcel"
gem 'gravtastic', '= 2.2.0'
gem "rack-openid", '=1.1.1', :require => 'rack/openid'

# not sure what this does...
gem "mocha"

我已经安装了这些插件:

2dc_jqgrid      
authlogic_openid    
open_id_authentication  
squirrel

我看到了这些类似的问题:

Missing a constant on load.. how can i get around this?

和

Requiring gem in Rails 3 Controller failing with "Constant Missing"

但他们的解决方案似乎不适用于我的情况。

我猜问题出在插件上,但我的 ruby​​-fu 太弱了。

更新

我想越来越近了。

似乎使用 authlogic_openid 的插件版本不是当前路线 - 所以已切换到使用 authlogic-oid gem。似乎还有一个旧/不同版本的 open_id_authentication - 所以更新了。

现在异常/堆栈跟踪如下:

/Users/kimptoc/.rvm/gems/ruby-1.8.7-p330@p-borisbikestats-pre-rails3/gems/activerecord-2.3.9/lib/active_record/base.rb:1998:in `method_missing': undefined method `openid_required_fields=' for #<Class:0x1036cccb8> (NoMethodError)
    from /Users/kimptoc/Documents/ruby/borisbikes/borisbikestats.pre3/app/models/user.rb:21
    from /Users/kimptoc/.rvm/gems/ruby-1.8.7-p330@p-borisbikestats-pre-rails3/gems/authlogic-2.1.6/lib/authlogic/acts_as_authentic/base.rb:33:in `acts_as_authentic'
    from /Users/kimptoc/Documents/ruby/borisbikes/borisbikestats.pre3/app/models/user.rb:16

现在使用这些宝石:

authlogic (2.1.6)
authlogic-oid (1.0.4)
rack-openid (1.2.0)
ruby-openid (2.1.8)

似乎 authlogic-oid 没有被加载/初始化的问题......我的 Gemfile 看起来像这样:

gem "ruby-openid", :require => "openid"
gem "authlogic-oid", :require => "authlogic_openid"
gem "authlogic"
gem "rack-openid", :require => 'rack/openid'

另外,app/openid 登录的东西现在不工作了——所以我想我需要再玩一下这些 gem 的版本......

提前致谢, 克里斯

【问题讨论】:

    标签: ruby-on-rails ruby rubygems


    【解决方案1】:

    (有趣的项目名称!)

    我认为从堆栈跟踪来看,插件 open_id_authentication 与 Rails 2 不兼容,需要 Rails 3 才能运行。

    如果您要升级到 Rails 3,我会先让项目达到使用新版本 Active* 和 Rails 的程度,然后再尝试修复一个插件。

    【讨论】:

    • 我同意,但我认为您的 Rails 版本是错误的。从外观上看,它与 Rails THREE 不兼容,并且曾经与 TWO 兼容。
    • 嗯——但你的堆栈中还没有 Rails 3——你正在使用 Rails 2.3.9 运行。在这种情况下,这看起来像 gem 不兼容 - 如果 rake 规范有效并且捆绑 rake 规范失败,那么我认为您需要检查所有系统 gem,将它们与 bundler 放入 .gems 目录的版本进行比较并在您的应用中“固定”版本号。例如。 gem 'rack', '=1.1.0'。您可能获得了比您需要的新版本的 gem,所以它失败了。
    • 感谢您的想法 - stef 是正确的,仍在此代码分支的 rails2 上 ​​- 看看修复捆绑器问题是否对我的 rails3 分支有帮助。尝试删除 open_id_auth 插件并确实解决了问题 - 但我认为我需要它来登录我的东西:( 似乎我目前已经破坏了我的 openid 身份验证 - 也许修复它会有所帮助。
    猜你喜欢
    • 1970-01-01
    • 2013-10-24
    • 1970-01-01
    • 2019-04-10
    • 1970-01-01
    • 2012-03-16
    • 2020-11-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多