何らかの理由で、単純なデコレータ コードが実稼働マシンでは失敗しますが、開発環境では問題なく動作します[1]。
私はそれを馬鹿にして、以下が最も単純な失敗部分であることがわかりました:
Spree::Variant.class_eval do
def price=(value)
self.price = normalize_number(value)
end
end
失敗するSystemStackError (stack level too deep):
デバッグすると、実際、関数が呼び出され続けていることがわかります。self.price= は price= を呼び出します。
これに取り組むための通常の Rails/Ruby パターンは何ですか? 私が欲しいのは:
呼び出されたらattribute_foo=(bar)
、それをカスタム コードに委任します。そこでは、渡されbar
た小さなカスタム コードを介して実行できます。次に、変更bar
したものを attribute_foo に割り当てます。
[1]: 唯一の違いは、Ruby パッチ バージョンと、運用マシンが dev: の 32 ビット バージョンに対して 64 ビット バージョンであるという事実ですruby 1.8.7 (2011-02-18 patchlevel 334) [x86_64-linux]
。