0

私はRails 2.3アプリを維持しており(Rails 4に移行すると多くのことが壊れました)、パスワードをデータベースにプレーンテキストで保存する代わりに暗号化/復号化しようとしています。

attr_encrypted gemの指示に従って、追加しました

gem "attr_encrypted"

私のGemfileに、bundle installを実行しました-すべて満足しています。

次に、指示に従って、新しいフィールド encrypted_pa​​ssword をテーブルに移行し、app/models/serverobj.rb に 1 行を追加しました。

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_paths に含めてはいけません。で attr_encrypted gem を見つけ、それを の行に/var/lib/gems/1.8/gems/追加しました。 config.load_pathsenvironment.rb

しかし、まだ「未定義のメソッド attr_encrypted」が表示されます。

試してみたいものがなくなってきました。何か案は?

4

1 に答える 1

0

あなたの問題は、attr_encryptedgem が (現在のバージョンでは) Rails 2.3 と互換性がないことだと思います。あなたのコメントによると、Bundler は gem の読み込みをスキップしてNameError: uninitialized constant ActiveRecord::VERSIONいます。これは、そうするとエラーが発生するためです。これが、アプリで gem の機能を使用できない理由です。

ただし、gem はもともと 2009 年に作成されたものであるため、古いバージョンでもRails と互換性がある可能性があります古いバージョンのいずれかを使用するように Gemfile を更新してみてください。

gem 'attr_encrypted', '1.0.8'

そして、それがうまくいくかどうかを確認してください。API はバージョン間で変更される可能性があるため、最終的に使用するバージョンに対応する README ファイルを必ず参照してください。

于 2015-07-28T16:05:14.047 に答える