如何将Bundler与脱机.gem文件一起使用?

问题描述 投票:33回答:6

对于我的应用程序,我需要处理加密的ZIP文件。尽管他们的网站看起来很恐怖,但看来Chilkat的commercial Zip gem可能是实现此目标的最佳方法。

由于这是一种商业宝石,因此在Bundler观察的任何典型宝石来源中都没有。我能够在Mac OS X上安装gem的Linux 64位版本(尽管我还没有尝试运行它,因此尚无消息是否真的可行)。但是,我首先要让Bundler识别并从我下载的.gem文件中加载gem。

Bundler有一个path attribute,我已经尝试通过多种方式使用它,但是我还没有使它起作用:

  1. 我尝试使用path指向.gem文件本身,但是path需要目录。
  2. 我尝试将.gz添加到.gem文件的末尾并解压缩它-我得到了一个目录,其中包含data.tar.gz和metas.gz。指向包含这两个文件的提取目录的路径无效。
  3. 我尝试提取data.tar.gz和metas.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看到该目录中确实存在该宝石的任何想法?除了path属性之外,其他任何选项似乎都不起作用?

非常感谢!

ruby-on-rails ruby rubygems bundler
6个回答
72
投票
我也遇到了同样的错误:

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

通过指定版本号解决:

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

>=0.0.1用于该版本已还原为原始错误。但是,我无法解释这些。

在Gemfile手册页上引用JD的有用评论:“类似于:git选项的语义,:path选项要求所涉及的目录包含gem的.gemspec,或者您指定一个显式版本该捆绑软件应该使用的。“    

10
投票

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目录。


5
投票
bundle install --local

这将安装本地gem。


0
投票
这在我安装rubygems.org尚不可用的ruby-debug-base19版本时为我工作。

另一种方法是设置自己的gem服务器,供所有应用程序服务器访问。参见http://guides.rubygems.org/run-your-own-gem-server/

我从未亲自做过,但看起来很简单。只要确保您的gem服务器将在Internet上,您都不会违反任何Chilkat服务条款即可。


0
投票
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
© www.soinside.com 2019 - 2024. All rights reserved.