2009-07-21 8 views
5

私はプラグインとしてRailsエンジンを開発中です。ロード時にRailsの設定に必要な変更を加えて、Gemの依存関係を指定するだけでなく、いくつかのロードパスを追加することができるようにしたいと思います。エンジンプラグイン内でRailsの設定を変更するにはどうすればよいですか?

プラグインのinit.rbファイルはconfigオブジェクトにアクセスできますが、これは効果的に読み取り専用ですが、宝石を指定できますが違いはありません。この時点でイニシャライザが既に実行されている必要があります。

私はそうのような新しいRailsの::初期化子ブロックでファイルを必要とすることによって、今のところ、この周りを持っている:

Rails::Initializer.run do |config| 
    config.gem "authlogic", :version => ">= 2.0.9" 
    # etc 
end 

これは動作しますが、メインアプリケーションのenvironment.rbにで既存の設定を払拭。

おそらく私は、右の段階でプラグインの設定を読み込むenvironment.rbに何かを加えるエンジンのジェネレータを持っているかもしれませんが、これを行うためにconfig/initializersにファイルを追加する方法があるかもしれませんジョブ。これについては、どのように最善を尽くすかわからない。

答えて

1

私はconfig/initializersルートに行きます。これは、プラグイン固有の設定コードを入れるための標準フォルダであり、正しい時刻にロードされます。

実装のために、設定ファイルを持たないすべてのものについて、わかりやすいデフォルトを選択するようにしたいと思います。 (私は、これは常に可能ではありません理解しています。)

次の私は、自動的に使用して設定/初期化子のconfigファイルを作成したプラグインで発電作成します。最後に

./script/generate plugin MyPlugin --with-generator 

を、私は入れてしまうでしょうプラグインのインストール時にジェネレータスクリプトを実行するための私のプラグインのinstall.rbの何か。このようにして、configファイルはインストール時に自動的に生成され、ユーザはデフォルト設定を復元したい場合でも簡単に再生成することができます。

+0

私には良い方法のように聞こえること。 環境内の設定ファイル(development.rbなど)とは異なります。)config/initializersのファイルにはconfigオブジェクトへのアクセス権がありません。この状況でどのようにgemの依存関係を指定するのか知っていますか? ありがとう – DavidNorth

+0

これまでに唯一の方法は、私のエンジンからファイルを読み込んで、environment.rbのRails :: Initializerブロックからevalしてファイルに 'config 'config.gemを呼び出すことができる eval(File.read( "#{RAILS_ROOT} /vendor/plugins/my-engine/config/gems.rb")) これは非常に醜いですが、そのブロックの外でgemの依存関係を指定する必要はありません。 私の発電機はそのブロック内に関連するラインを追加するだけかもしれないが、エンジンの要求をできるだけ別々にしたいと思う。 – DavidNorth

0

あなたは簡単に私はレール2.3.5でそれを試してみましたが、それは魔法のように働いた

config.gem 'quick_magick' 

(プラグインディレクトリの下)init.rbするために、この行を追加することができます。

1

これを宝石ではなくプラグインとして配布してもよろしいですか?エンジンを宝石としてパッケージ化する場合、宝石の製造プロセスの一部として宝石の依存関係を指定することができます。あなたの宝石を作成するジュエラーを使用している場合たとえば、あなただけの単一の行を追加します。

s.add_dependencyあなたの宝石が、それはすべての依存関係がインストールされていることを確認しますインストールされている「authlogic」

。 Jewelerの完全な設定例については、Googleの「jeweler gem dependency」を参照してください。

また、自分のレールエンジンで多くの作業をしていて、最近は多くの便利な基本機能が抽出されています。あなたは他のエンジンの問題のために、これは便利かもしれません:

http://keithschacht.com/creating-a-rails-3-engine-plugin-gem/

関連する問題