未定义的方法attr_encrypted在Rails 2.3应用程序



我正在维护一个Rails 2.3应用程序(移动到Rails 4破坏了太多东西),并试图加密/解密密码,而不是将其以明文形式保存在数据库中。

按照attr_encrypted gem的说明,我添加了

gem "attr_encrypted"

到我的Gemfile,运行bundle install - all happy.

然后,根据指令,我将一个新字段encrypted_password迁移到表中,并在app/models/serverobj.rb中添加一行:

attr_encrypted :password, :key => 'foo'

但是当我在那里浏览时,我得到这样的堆栈跟踪:

=> Booting WEBrick...
/home/art/vendor/rails/activerecord/lib/active_record/base.rb:1833:in `method_missing_without_paginate': undefined method `attr_encrypted' for #<Class:0x7f009f372200> (NoMethodError)
    from /home/art/vendor/plugins/will_paginate/lib/will_paginate/finder.rb:164:in `method_missing'
    from /home/art/app/models/serverobj.rb:17
...
    from /home/art/config/environment.rb:70

serverobj.rb,第17行是:

attr_encrypted :password, :key => 'foo'

environment.rb,第70行是:

Rails::Initializer.run do |config|
  config.load_paths += %W( #{RAILS_ROOT}/vendor/gems/ #{RAILS_ROOT}/app/exceptions/ )

啊哈!我说过,attr_encrypted gem不能在load_path中。所以我在/var/lib/gems/1.8/gems/中找到了attr_encrypted gem,并将其添加到environment.rb中的config.load_paths行。

但我仍然得到'Undefined method attr_encrypted'。

我已经没有东西可以尝试了。什么好主意吗?

我相信你的问题是attr_encrypted gem(在其当前版本)与Rails 2.3不兼容。根据你的评论,Bundler跳过加载gem,因为当它这样做时会引发错误NameError: uninitialized constant ActiveRecord::VERSION,这就是为什么在你的应用程序中没有gem的功能。

然而,gem最初是在2009年创建的,所以很可能它的旧版本与您的Rails兼容。尝试更新您的Gemfile以使用旧版本之一,例如:

gem 'attr_encrypted', '1.0.8'

看看效果是否更好。API在不同版本之间可能会发生变化,因此请确保引用您最终使用的版本的相应README文件。

相关内容

  • 没有找到相关文章

最新更新