1

私は、自分のニーズに合わせて変更および拡張する必要があるフレームワーク (ブラックライト) を使用しています。つまり、いくつかの関数、ビュー、およびコントローラーを再実装する必要があります。私が現在行っていることは、ファイルを作業ディレクトリ内の一致するパスにコピーし、コピーしたファイル内で変更を加えることです。そうすれば、コピーしたファイルが gem の元のファイルを上書きします。gem の新しいバージョンがリリースされたら、それに応じてコピーしたファイルを変更する必要があるかもしれません。gem を変更するという問題を解決する方法が好きではありません。それを行うより良い方法はありますか?

4

1 に答える 1

3

特定の状況に応じて、3 つの方法を知っています。

最も簡単なのは、適切な場所に上書きすることです。たとえばcurrent_user、ApplicationController で Devise を上書きできます。一部のメソッドは、モデル、ヘルパーに適用されます。適切な場所でそれを行うだけです。

2つ目はモンキーパッチです。上書きするのに適した場所がなく、変更するものがあまりない場合は、アプリで gem の特定のメソッドにモンキー パッチを適用できます。/lib一般的なやり方は、gem のモジュール名とフックする場所に従って、そのようなモンキー パッチを に配置することです。

3 つ目は、github で独自の gem のフォークを作成することです。gem をフォークし、ローカルに複製し、必要なものを変更して、プッシュします。gem のメンテナーがあなたの変更を受け入れることができれば、それは素晴らしいことです。そうでない場合は、Gemfile に設定することで独自のバージョンの gem を使用できます。

 gem 'some_geg', :git => 'git://github.com/my_repos/some_gem.git'

メインに更新がある場合は、独自のバージョンにマージできます。

于 2013-08-27T08:45:12.637 に答える