对于我的应用程序,我需要处理加密的ZIP文件。尽管他们看起来很可怕,但似乎Chilkat的commercial Zip gem可能是实现这一目标的最佳方式。
因为这是一个商业宝石,所以他们没有Bundler所看到的任何典型宝石资源。我能够在Mac OS X下安装Linux 64位版本的gem(虽然我还没有尝试过运行它,所以还没有任何关于它是否真的有用的话)。但是,我首先尝试让Bundler从我下载的.gem文件中识别并加载gem。
Bundler有一个path attribute,我试图在几个方面使用它,但我还没有让它工作:
这是我得到的错误:
$ 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看到gem确实在这个目录中的任何想法?路径属性以外的任何其他选项似乎都不起作用?
非常感谢!
答案 0 :(得分:71)
我正在使用Rails 3.0.3,Rails 3和bundler的新功能。
我得到同样的错误:
gem 'mygem', :path => '/path/to/gem'
通过指定版本号解决:
gem 'mygem', '0.0.1', :path => '/path/to/gem'
将>=0.0.1
用于恢复为原始错误的版本。但是,我无法解释这一点。
引用JD有用的提交,来自Gemfile手册页:“类似于:git选项的语义,:path选项要求相关目录包含gem的.gemspec,或者指定显式捆绑商应该使用的版本。“
答案 1 :(得分:10)
尝试解压缩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目录(如果它尚不存在)。
答案 2 :(得分:5)
将gem复制到应用程序根文件夹中的vendor / cache目录。
bundle install --local
这将安装本地gem。
答案 3 :(得分:0)
由于此gem将在您运行应用程序的任何计算机上是本地的,只需在Gemfile中指定gem,然后手动安装gem。当您运行“捆绑安装”时,捆绑包将看到它已经安装并继续运行。
当安装ruby-debug-base19的版本时,这对我来说很有用,但在rubygems.org上还没有。
另一种方法是设置您自己的宝石服务器,可供所有应用服务器访问。见http://guides.rubygems.org/run-your-own-gem-server/
我自己从未这样做,但看起来非常简单。如果您的宝石服务器将在互联网上,请确保您没有违反任何Chilkat服务条款。
答案 4 :(得分:0)
首先使用semanticart解决方案解压缩gem。然后在解压缩的gem中添加gemspec。 Bundler将能够正常运行。
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