Как использовать Bundler с автономным .gem файлом? - PullRequest
33 голосов
/ 25 ноября 2010

Для моего приложения мне нужно обрабатывать зашифрованные файлы ZIP.Несмотря на их ужасно выглядящий сайт, кажется, что коммерческий драгоценный камень Zip от Chilkat, вероятно, является лучшим способом реализовать это.

Поскольку это коммерческий драгоценный камень, они не имеют его влюбой из типичных источников драгоценных камней, на которые смотрит Бундлер.Мне удалось установить 64-битную версию гема для Linux под Mac OS X (хотя я еще не пробовал его запускать, поэтому пока не известно, сработает ли это на самом деле).Однако сначала я пытаюсь заставить Bundler распознать и загрузить гем из загруженного мною файла .gem.

У Bundler есть атрибут пути , который я пытался использовать внесколькими способами, но я еще не получил его на работу:

  1. Я пытался использовать путь, чтобы указать на сам файл .gem, но путь ожидает каталог.
  2. Я пыталсядобавив .gz в конец файла .gem и распаковав его, я получил каталог с data.tar.gz и metadata.gz внутри.путь, указывающий на извлеченный каталог с этими двумя файлами, не работает.
  3. Я попытался извлечь data.tar.gz и metadata.gz и поместить извлеченные версии в каталог, на который я указал путь.Это не удалось.
  4. Я заметил, что у гема нет файла 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 увидеть, что драгоценный камень действительно находится в этом каталоге?Какие-либо другие параметры, кроме атрибута пути, который, кажется, не работает?

Большое спасибо!

Ответы [ 5 ]

71 голосов
/ 24 декабря 2010

Я использую Rails 3.0.3, новый для Rails 3 и связки.

Я получил ту же ошибку с:

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

Решено указанием номера версии:

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

Использование >=0.0.1 для версии, возвращенной к исходной ошибке.Однако я не могу ничего объяснить.

Цитирую полезный комментарий JD со страницы руководства Gemfile: «Подобно семантике опции: git, опция: path требует, чтобы рассматриваемый каталог либосодержит .gemspec для гема или указанную вами явную версию, которую должен использовать упаковщик. "

10 голосов
/ 25 ноября 2010

Попробуйте распаковать камень, а затем использовать путь в вашем 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 в корне вашего приложения, если он еще не существует.

5 голосов
/ 11 ноября 2011

Скопируйте гем в каталог vendor / cache в корневой папке вашего приложения.

bundle install --local

Это установит локальный гем.

0 голосов
/ 19 сентября 2013

Сначала распакуйте драгоценный камень, используя решение от semanticart. Затем добавьте 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
0 голосов
/ 31 января 2012

Поскольку этот драгоценный камень будет локальным для любой машины, на которой вы будете запускать ваше приложение, просто укажите драгоценный камень в Gemfile, затем установите его вручную. Когда вы запускаете "bundle install", bundler увидит, что он уже установлен, и продолжит работу.

Это сработало для меня при установке версии ruby-debug-base19, которая еще не была доступна на rubygems.org.

Другим способом было бы настроить свой собственный гем-сервер, который будет доступен для всех ваших серверов приложений. Смотри http://guides.rubygems.org/run-your-own-gem-server/

Я никогда не делал этого сам, но это выглядит очень просто. Просто убедитесь, что вы не нарушаете какие-либо условия обслуживания Chilkat, если ваш гем-сервер будет в Интернете.

...