50

ここでエンジンを実行しています。スタンドアロンでも問題なく動作します。

それを gem に変換して別のアプリケーション内にロードすると、エンジン gem の依存関係から多くの未定義エラーが発生します。

ここにgemspecがあります:

s.add_dependency('paperclip')
s.add_dependency('jquery-rails')
s.add_dependency('rails3-jquery-autocomplete')
s.add_dependency('remotipart')
s.add_dependency('cancan')

アプリケーションでバンドル インストールを実行すると、これらすべての依存関係が一覧表示されますが、アプリケーションを実行すると、未定義のメソッド エラーが多数発生します (例: paperclip の has_attachment)。アプリケーションがエンジンの依存関係をロードしていないようです。これはデフォルトの動作ですか? 変更できますか?エンジン内のプラグインでも同じことが起こりました。

それらの宝石をアプリケーションのGemfileに手動で挿入すると、すべてが機能します...

4

7 に答える 7

78

それらを gemfile に含めて、bundle install を実行します。次に、 でそれらを要求しますlib/<your_engine>/engine.rb file。rubygems を要求することを忘れないでください

  require 'rubygems'
  require 'paperclip'
  require 'jquery-rails'
  require 'rails3-jquery-autocomplete'
  require 'remotipart'
  require 'cancan'

次に、ホスト アプリ (gem を含めたアプリ) で bundle install/ bundle update を実行すると (bundle update はうまくいきました)、すべてが完全に機能するはずです。ホストアプリでコンソールを起動して、モジュール名を入力するだけでこれをテストすることもできます。

Loading development environment (Rails 3.0.3)
irb(main):001:0> Paperclip
=> Paperclip

お役に立てれば

于 2011-05-01T18:44:00.993 に答える
2

gem ファイルを .gemspec ファイルと engine.rb ファイルの両方に追加する必要があります。.gemspec ファイルでは、次のようになります。 s.add_dependency "kaminari", "0.16.1"

上部の engine.rb ファイルに次を追加します。 require "kaminari"

Rails エンジンの Gemfile と bundle install に gem を追加する必要もあると思いますが、そこに必要かどうかはわかりません。

于 2016-01-11T21:38:55.633 に答える
2

paperclip のREADMEから:

Rails 以外で使用する場合:

class ModuleName < ActiveRecord::Base
  include Paperclip::Glue
  ...
end

私は同じ問題を抱えていましたが、それで修正されました。

于 2014-05-12T14:27:11.870 に答える
0

あなたは本当にGemsecでそれらを必要とすべきではなく、それらはロードされるべきです。「ここにgemspecがあります」と言うとき、あなたはそれGem::Specification.new do |s|をその効果で囲んでいますか?

于 2013-01-14T16:47:15.557 に答える
0

現時点では (Rails 3.1 以降だと思います)、test/dummy/Gemfile で gem を宣言する必要はもうありません。

test/dummy/Gemfile からの引用 (を使用して生成rails plugin new my_engine --full):

simple_view_helpers.gemspec で gem の依存関係を宣言します。Bundler はランタイムの依存関係をベースの依存関係のように扱い、開発の依存関係はデフォルトで :development グループに追加されます。

gemspec ではなく、ここでまだ開発中の依存関係を宣言します。これらには、パスまたは Git からのエッジ Rails または gem が含まれる場合があります。gem を ruby​​gems.org にリリースする前に、これらの依存関係を gemspec に移動することを忘れないでください。

于 2012-09-27T13:36:38.133 に答える
0

簡単な bundler コマンドを使用して、環境のすべての gem を含めることができます。

Bundler.require(*Rails.groups)

これを に追加できますconfig/initializer

于 2017-01-08T15:44:50.223 に答える