web-dev-qa-db-ja.com

Rails3 / Bundlerのgemをベンダー化するにはどうすればよいですか

Rails 2.Xでは、gemsをvendor/gems/gem_nameにコピーするか、rakeコマンドrake gems:unpackを使用できます。Rails3はbundlerを使用するため、動作しないようです。コマンドbundle packageを見つけましたが、同じようには機能しません。

編集:

したがって、これについて少し詳しく説明します。

Rails 2が機能した方法で、簡単にgrepvendor/gemsの内容を見つけることができました。それらが.gemファイルにバンドルされている場合、また、gem/pluginを開発するときは、コンテキスト内でテストするためにRailsアプリケーション内に配置することが非常に役立ちます。そのようなことをbundlerで行うには/ Rails3?ワークフローは本質的に何らかの形で壊れていますか?

47
troelskn

質問の2番目の部分に答え、プラグイン/ gemを開発し、gemを公開せずにRailsアプリで出荷します。これを行うことができます。

Gemfile

gem 'my_private_gem', :path => "vendor/gems/my_private_gem-VERSION"

gem unpack my_private_gem --target vendor/gems

注:バンドルパッケージすべてのgemをアンパックします(Gemfile.lockにあるものと同じ数)。 gitには入れたくないでしょう。

107
oma

Bundlerに相当するisbundle package。 Gemfileで指定されたすべての.gemファイルをvendor/cacheにパッケージ化して、今後のインストールで http://rubygems.org/ ではなくこのキャッシュからgemを取得できるようにします

27
John Topley

正しいBundlerの同等物はbundle install --deploymentです。これにより、gemsが展開された状態でvendor/bundleにインストールされます。

22

これは私のために働いたものです:

gem unpack <GEM_NAME> [-v <VERSION>] --target vendor/gems
gem specification <GEM_NAME> [-v <VERSION>] --Ruby > vendor/gems/<GEM_NAME>[-<VERSION>].gemspec

例えば:

gem unpack sidekiq-pro -v 2.1.4 --target vendor/gems
gem specification sidekiq-pro -v 2.1.4 --Ruby > vendor/gems/sidekiq-pro-2.1.4.gemspec

最初のコマンドは、gemをvendor/gemsディレクトリに解凍します。ただし、これにはgemspecが含まれていません。 2番目のコマンドは、関連するgemspecを作成します。別のポスターが似たようなことを述べたことは注目に値します。このソリューションは、gemspecをyamlではなくRuby形式で正しく書き込みます。

次に、Gemfileを更新して、ベンダー提供のgemを指すようにします。

gem '<GEM_NAME>', '<VERSION>', :path => "vendor/gems/<GEM_NAME>-<VERSION>"

例えば:

gem 'sidekiq-pro', '2.1.4', :path => "vendor/gems/sidekiq-pro-2.1.4"
5
jsears

hosted_gem_development gemによって提供される「ホストされた」開発インフラストラクチャの使用を検討してください。

Gemの開発は、使用するアプリケーションに関して個別のプロジェクトのように振る舞うため、多くの場合トリッキーです。

「ホストされた」開発インフラストラクチャは、ライブアプリケーションにそれらを「ホストする」ように含めることにより、gem開発を容易にします。次に、通常のアプリケーションコードを更新するように、gemのコードを更新します。

プロジェクトページに移動

0
Alex Fortuna