ここではエンジンを使用していますが、スタンドアロンで問題なく動作します。
それを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ですべて機能します...
それらをgemfileに含めて、bundle installを実行します。次に、lib/<your_engine>/engine.rb file
。ルビジェムを要求することを忘れないでください
require 'rubygems'
require 'Paperclip'
require 'jquery-Rails'
require 'Rails3-jquery-autocomplete'
require 'remotipart'
require 'cancan'
次に、ホストアプリ(gemを組み込んだアプリ)でバンドルのインストール/バンドルの更新を実行します(バンドルの更新でうまくいきました)。その後、すべてが完全に機能するはずです。ホストアプリでコンソールを起動し、モジュール名を入力するだけでこれをテストすることもできます。
Loading development environment (Rails 3.0.3)
irb(main):001:0> Paperclip
=> Paperclip
お役に立てれば
Danielが投稿したように手動で要求することも、自動的に要求することもできます。 3つのファイルに依存関係を追加する必要があります。
yourengine.gemspec
s.add_dependency "Rails", '4.1.0'
s.add_dependency "sqlite3"
Gemfile
# Imports dependencies from yourengine.gemspec
gemspec
lib/yourengine.rb
# requires all dependencies
Gem.loaded_specs['yourengine'].dependencies.each do |d|
require d.name
end
require 'yourengine/engine'
module Yourengine
end
更新:依存関係を要求する方法の単純化したデモです。それをテストして、不要なアイテムをフィルタリングする必要があります。例:d.type ==:development(thx @ imsinu9)でない限り、d.nameが必要
ペーパークリップから [〜#〜] readme [〜#〜] :
Rails以外で使用する場合:
class ModuleName < ActiveRecord::Base
include Paperclip::Glue
...
end
私は同じ問題を抱えていましたが、それで解決しました。
Gemファイルを.gemspecファイルとengine.rbファイルの両方に追加する必要があります。 .gemspecファイルでは、次のようになります:s.add_dependency "kaminari", "0.16.1"
上部のengine.rbファイルに次を追加します:require "kaminari"
Rails engine Gemfile and bundle installにもgemを追加する必要があると思いますが、必要かどうかはわかりません。
単純なbundlerコマンドを使用して、環境のすべてのgemを含めることができます。
Bundler.require(*Rails.groups)
これをconfig/initializer
に追加できます。
現時点では(Rails 3.1以上だと思います)、test/dummy/Gemfileでgemを宣言する必要はもうありません。
Test/dummy/Gemfileからの引用(Rails plugin new my_engine --full
を使用して生成):
Simple_view_helpers.gemspecでgemの依存関係を宣言します。 Bundlerはランタイム依存関係を基本依存関係のように扱い、開発依存関係はデフォルトで:developmentグループに追加されます。
Gemspecではなく、ここでまだ開発中の依存関係を宣言します。これらにはEdge RailsまたはパスまたはGitからのgemが含まれます。gemをrubygems.orgにリリースする前に、これらの依存関係をgemspecに移動することを忘れないでください。
あなたは本当にGemsec上でそれらを必要とすべきではなく、それらはロードされるべきです。 「これがgemspecです」と言うと、それをGem::Specification.new do |s|
などで囲みます。