如何在脱机.gem文件中使用Bundler?

she*_*edd 33 ruby rubygems ruby-on-rails bundler

对于我的应用程序,我需要处理加密的ZIP文件.尽管看起来可怕的网站,但似乎Chilkat的商业Zip宝石可能是实现这一目标的最佳方式.

因为这是一个商业宝石,所以他们没有在Bundler看到的任何典型宝石资源中使用它.我能够在Mac OS X下安装Linux 64位版本的gem(虽然我还没有尝试过运行它,所以还没有任何关于它是否真的有用的话).但是,我首先尝试让Bundler从我下载的.gem文件中识别并加载gem.

Bundler有一个路径属性,我试图在几个方面使用它,但我还没有让它工作:

  1. 我尝试使用path指向.gem文件本身,但路径需要一个目录.
  2. 我尝试将.gz添加到.gem文件的末尾并将其解压缩 - 我在里面找到了一个带有data.tar.gz和metadata.gz的目录.路径指向提取的目录,这两个文件不起作用.
  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)'
Run Code Online (Sandbox Code Playgroud)

关于如何让Bundler看到gem确实在这个目录中的任何想法?路径属性以外的任何其他选项似乎都不起作用?

非常感谢!

ace*_*des 72

我正在使用Rails 3.0.3,Rails 3和bundler的新功能.

我得到了同样的错误:

gem 'mygem', :path => '/path/to/gem'
Run Code Online (Sandbox Code Playgroud)

通过指定版本号解决:

gem 'mygem', '0.0.1', :path => '/path/to/gem'
Run Code Online (Sandbox Code Playgroud)

使用>=0.0.1的版本恢复到原来的错误.但是,我无法解释任何这一点.

引用JD有用的提交,来自Gemfile手册页:"类似于:git选项的语义,:path选项要求相关目录包含gem的.gemspec,或者指定Bundler的显式版本应该用."

  • 不知道为什么这个答案被否决了.明确包括为我工作的版本号. (5认同)
  • 回答有关版本号的问题.从Gemfile手册页:"类似于:git选项的语义,:path选项要求相关目录包含gem的.gemspec,或者指定Bundler应使用的显式版本." (3认同)

sem*_*art 10

尝试解压缩gem,然后使用Gemfile中的路径.

gem unpack my-gem-file.gem /my-rails-app/vendor/gems/
Run Code Online (Sandbox Code Playgroud)

然后在你的Gemfile中添加一行这样的行

gem 'my-gem', '0.0.1', :path => 'vendor/gems/my-gem'
Run Code Online (Sandbox Code Playgroud)

显然路径和版本号会有所不同.您还可能需要在应用程序根目录中创建vendor/gems目录(如果该目录尚不存在).


Ind*_*a K 5

将gem复制到应用程序根文件夹中的vendor/cache目录.

bundle install --local
Run Code Online (Sandbox Code Playgroud)

这将安装本地gem.