Связывание локального драгоценного камня (который я разрабатываю), похоже, не включает каталог lib (с использованием rvm)

#ruby #rubygems #gem #rvm #bundler

#ruby #rubygems #драгоценный камень #rvm #bundler

Вопрос:

Я пытаюсь локально разработать драгоценный камень и установил его с помощью Bundler.

Мой Gemfile выглядит так:

 source "http://rubygems.org"
gemspec
  

И мой gemspec — это стандартный файл gemspec.

Я могу установить драгоценный камень с помощью «bundle install» в каталоге, и я вижу, что локальный драгоценный камень и все его зависимости устанавливаются:

 bundle install
Using rack (1.3.4) 
Using tilt (1.3.3) 
Using sinatra (1.3.1)  
Using {my gem} (0.0.2) from source at . 
Using bundler (1.0.21) 
Your bundle is complete! Use `bundle show [gemname]` to see where a bundled gem is installed.
  

Однако, когда я создаю «список драгоценных камней», мой драгоценный камень не включен в список драгоценных камней — это мое предположение о том, почему мой каталог bin не отображается в path. Есть ли способ протестировать локальный драгоценный камень и включить его в список установленных драгоценных камней с помощью bundler, чтобы каталог bin работал правильно?

Ответ №1:

Самый простой способ избавиться от bundler: command not found: {your bin executable} :

 git add bin/*  # git-ls-files will now list your bin executables.
bundle install 
# No git-commit necessary.
bundle exec <MY_BIN_EXECUTABLE>
  

Комментарии:

1. бах, я забыл, что сгенерированный bundler gemspec использует git-ls-files. Спасибо!

Ответ №2:

gem list показывает установленные в вашей системе драгоценные камни, а не драгоценные камни в вашем пакете (это часто одно и то же, но не всегда — как в этом случае). Когда вы используете Bundler, вы всегда должны выполнять исполняемые файлы gem bundle exec , чтобы Bundler мог настроить среду для вас. Итак, если у вас есть двоичный файл, вызываемый, например, mygem , вы должны использовать bundle exec mygem .

Смотрите больше информации на сайте Bundler или на странице руководства.

[Править]

Также убедитесь, что ваш gemspec включает каталог bin! Общее соглашение заключается в создании каталога, вызываемого bin на том же уровне, что и ваш lib каталог, поместите туда свои двоичные файлы, а затем добавьте это в качестве каталога в вашей gemspec. Если вы этого не сделаете, Bundler не будет предоставлять ваши двоичные файлы!

Комментарии:

1. Спасибо за быстрый ответ. У меня есть двоичный файл в каталоге bin с тем же именем, что и у драгоценного камня (так, {gemname}/bin/{gemname} . Я попробовал bundle exec mygem, но получил сообщение : bundler: command not found: mygem Install missing gem executables with bundle install . Я запустил команду из каталога {gemname}

2. Вы действительно запускали bundle exec mygem или bundle exec name_of_binary ? Кроме того, у вас также есть bindir строка в вашем .gemspec? Хотя в спецификации указано значение по умолчанию bin , возможно, его стоит включить.

3. На самом деле я пробовал оба, но безуспешно. Я подумал, что, возможно, у bundler возникли проблемы с тем, что файл bin называется так же, как gem, но изменение этого тоже не помогло. У меня есть это в моей спецификации gemspec (по умолчанию из bundler): ` s.executables = git ls-files -- bin/*.split("n").map{ |f| File.basename(f) } . Есть другие идеи? Однако ваша помощь сработала в другом месте — я решил еще одну проблему, с которой я столкнулся, потому что я не использовал bundle exec — так что спасибо!

Ответ №3:

У меня тоже была эта проблема.

Убедитесь, что исполняемые файлы и строки default_executable не содержат ‘bin /’. Затем:

 git add add . # You can be more precice if you want.
git commit -m "My lousy commit message."
bundle install
bundle exec <binaryname>