web-dev-qa-db-ja.com

Bundlerをオフラインの.gemファイルで使用するにはどうすればよいですか?

私のアプリケーションでは、暗号化されたZipファイルを処理する必要があります。彼らの恐ろしいサイトにもかかわらず、Chilkatの commercial Zip gem はおそらくこれを実装するための最良の方法であるようです。

これは商用の宝石であるため、Bundlerが見る典型的な宝石のソースには含まれていません。 Mac OS XでLinux 64ビット版のgemをインストールすることができました(まだ実行しようとしていないため、実際に動作するWordはまだありません)。ただし、私は最初に、Bundlerに、ダウンロードした.gemファイルからgemを認識してロードさせようとしています。

Bundlerには パス属性 があり、これをいくつかの方法で利用しようとしましたが、まだ動作していません。

  1. Pathを使用して.gemファイル自体を指すようにしようとしましたが、pathにはディレクトリが必要です。
  2. .gemファイルの最後に.gzを追加して抽出しようとしました-内部にdata.tar.gzとmetadata.gzがあるディレクトリを取得しました。これらの2つのファイルを含む抽出されたディレクトリを指すパスが機能しませんでした。
  3. Data.tar.gzとmetadata.gzを抽出し、抽出したバージョンをパスをポイントしたディレクトリ内に配置してみました。これは失敗しました。
  4. Gemにgemspecファイルがないことに気づきました-私はそれを作成し、それをディレクトリ内に配置しました。運が悪い。

これは私が得るエラーです:

$ bundle install
Fetching source index for http://rubygems.org/
Fetching source index for http://gems.github.com/
Could not find gem 'chilkat (>= 0, runtime)' in source at /Users/username/appname/vendor/cache/chilkat-9.1.0-x86_64-linux.
Source does not contain any versions of 'chilkat (>= 0, runtime)'

Bundlerに宝石が実際にこのディレクトリにあることを確認する方法に関するアイデアはありますか?機能していないように見えるパス属性以外の他のオプションはありますか?

どうもありがとう!

33
shedd

私はRails 3.0.3、Rails 3の新機能、およびバンドルを使用しています。

私はこれと同じエラーを受け取りました:

gem 'mygem', :path => '/path/to/gem'

バージョン番号を指定することで解決:

gem 'mygem', '0.0.1', :path => '/path/to/gem'

バージョンに>=0.0.1を使用すると、元のエラーに戻りました。ただし、これについては説明できません。

GemfileのmanページからJDの役立つコメントを引用します。「:gitオプションのセマンティクスと同様に、:pathオプションでは、問題のディレクトリにgemの.gemspecが含まれているか、またはバンドルする明示的なバージョンを指定する必要があります。使用する必要があります。」

71
aceofspades

Gemを解凍し、Gemfileのパスを使用してみてください。

つまり.

gem unpack my-gem-file.gem /my-Rails-app/vendor/gems/

次に、そのような行をGemfileに追加します

gem 'my-gem', '0.0.1', :path => 'vendor/gems/my-gem'

パスとバージョン番号は明らかに異なります。また、vendor/gemsディレクトリがまだ存在しない場合は、アプリのルートに作成する必要がある場合もあります。

10
semanticart

アプリケーションのルートフォルダーのvendor/cacheディレクトリにgemをコピーします。

bundle install --local

これにより、ローカルのgemがインストールされます。

5
Indika K

このgemは、アプリを実行するすべてのマシンに対してローカルであるため、Gemfileでgemを指定してから、手動でgemをインストールします。 「バンドルインストール」を実行すると、バンドラーはそれがすでにインストールされていることを確認し、次に進みます。

これは、rubygems.orgでまだ利用できないRuby-debug-base19のバージョンをインストールするときに機能しました。

別の方法は、すべてのアプリサーバーにアクセスできる独自のGemサーバーをセットアップすることです。 http://guides.rubygems.org/run-your-own-gem-server/ を参照してください

私はこれを自分でやったことはありませんが、とてもシンプルに見えます。 gemサーバーがインターネット上にある場合は、Chilkatの利用規約に違反していないことを確認してください。

0
Kelvin

まず、semanticartのソリューションを使用して宝石を解凍します。次に、展開したgemにgemspecを追加します。バンドラーは適​​切に実行できます。

Gem::Specification.new do |s|
  s.name         = "chilkat"
  s.version      = "9.4.1"
  s.platform     = Gem::Platform::Ruby
  s.required_rubygems_version = ">= 1.3.6"
  s.files        = Dir.glob("lib/**/*")
  s.require_path = "lib"
  s.summary      = "Make do with a self written gemspec"
end
0
liangzan