GetText、LoginEngine、UserEngineを連携する時の注意

昨日まで悩んでいた、production環境での「NoMethodError」が解決できた!require 'gettext/rails'をLoginEngineやUserEngineよりも先に宣言したら、エラーは発生しなくなった。今はproduction環境で正常に稼働している。プラグインを利用するときは、その利用を宣言する順番が問題になることがあるようだ。マニュアル通りにちゃんと宣言しても、不運にもその順番が悪いと、今回のように悩むことになるかもしれない...。(なんだか、MacOS9の頃の機能拡張のコンフリクトに似ているなと...。)今後、十分気に留めておこう。

設定の順番

以下のプラグインを連携して利用する時の順番
    1. Ruby-GetText-Package 1.8.0
    2. Engines
    3. LoginEngine
    4. UserEngine

具体的には、以下のように設定するだけで正常に動くようになった。(Ruby-GetText-Packageの設定をLoginEngine、UserEngineより前にしただけ。)

config/environment.rbの設定順序
$KCODE = 'u'    # 'u'=UTF-8, 's'=SJIS, 'e'=EUC-JP
require 'jcode' # Stringクラスのメソッドなどを、$KCODEに指定した文字コードで適切に動作するように置き換える。
# Be sure to restart your web server when you modify this file.

...(途中省略)...

# Include your application configuration below
# Ruby-GetText-Packageを使う宣言
require 'gettext/rails'

# Ruby GetTextにmsgmergeのパスを教えてあげる
ENV['MSGMERGE_PATH'] = '/Applications/Locomotive2/Bundles/standardRailsSept2006.locobundle/i386/bin/msgmerge'


module LoginEngine
  config :salt, "ror-salt"
  
  # Source address for user emails
  config :email_from, '送信元メールアドレス' # 届いたメールのfrom欄に表示される。

  # Destination email for system errors
  config :admin_email, 'システム管理者のメールアドレス'

  # Sent in emails to users
  config :app_name, 'Softwarebook'
end

module UserEngine
  config :admin_login, "zarigani"
  config :admin_email, 'zariganiユーザーのメールアドレス'
  config :admin_password, 'zarigani'
end


Engines.start :login, :user # 必ず:loginを最初に書く

UserEngine.check_system_roles