#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>