Подтвердить что ты не робот

Как использовать Bundler с автономным файлом .gem?

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

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

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

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

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

4b9b3361

Ответ 1

Я использую 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, опция: путь требует, чтобы рассматриваемый каталог либо содержал .gemspec для драгоценного камня, либо указывал явная версия, которую должен использовать пакетщик."

Ответ 2

Попробуйте распаковать драгоценный камень, а затем используйте путь в вашем Gemfile.

то есть.

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

затем добавьте такую ​​строку в свой Gemfile

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

Очевидно, что пути и номера версий будут различаться. Вам также может потребоваться создать каталог поставщика/драгоценных камней в корне приложения, если он еще не существует.

Ответ 3

Скопируйте драгоценный камень в каталог поставщика/кеша в корневой папке приложения.

bundle install --local

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

Ответ 4

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

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

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

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

Ответ 5

Сначала распакуйте камень с помощью решения 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