2014-08-31 2 views
0

Я пытаюсь создать инструмент CLI с рубином. Для моего инструмента требуется библиотека в пакете (log4r, ...). Поэтому проблема возникает, когда я переключаю свою рубиновую версию (2.0.0 -> 2.1.2) или когда gemset switch, некоторые драгоценные камни не устанавливаются в новой среде ruby. Итак, как я могу заставить мое приложение работать как vagrant, которые работают в каждой версии рубина, который я использую?Инструмент командной строки Ruby при переключении рубиновой версии в rvm

+0

Vagrant - это предварительно упакованное приложение. Он упаковывает его версию ruby, ее зависимость от gem и все такое. http://mitchellh.com/abandoning-rubygems – Joeyjoejoejr

ответ

0

Если вы упакуете приложение как драгоценный камень, вы можете включить Gemspec, который описывает ваше приложение. Одна из вещей, которую вы можете указать, - its runtime dependencies; когда пользователь запускает gem install myapp, тогда команда gem будет содержать все, что вы указали (например, log4r).

Это будет сложнее сделать это без Rubygems. Вы можете упаковать свое приложение вместе с определенной версией Ruby и всеми его требованиями - that's what Vagrant does - но это делает ваше приложение более крупным и означает, что у вас есть больше возможностей для обслуживания. Это будет тяжелая работа, если вы хотите установить приложение по всей системе и работать с каждой средой Ruby. Гораздо лучше, если приложение gem установит ваше приложение (будь то в масштабе всей сети или через rbenv/rvm), и пусть это будет управлять вашими зависимостями для вас. Для этого вам нужны default gems plugin for rbenv и rvm gemsets.

+0

Проблема в том, что я устанавливаю ruby ​​из rbenv/rvm, мое приложение доступно только для этой версии ruby ​​и gemset (скажем, 2.1.2, gemset по умолчанию). Все зависимости, такие как log4r, thor ... устанавливаются в /Users/guest/.rvm/gems/ruby-2.1.2. Так что, если я переключаю рубиновую версию, моя ошибка приложения, потому что в новой рубиновой среде log4r и thor не установлены –

+0

Yep - но если вы используете rbenv/rvm, ваше приложение не должно быть * доступно вообще *, если вы переключитесь в среду без вашего приложения. Вы можете использовать по умолчанию gemsets с rbenv/rvm, которые могут помочь вам переключаться между версиями Ruby, не задумываясь о том, чтобы установить приложение на них - я добавил что-то в свой первоначальный ответ, чтобы отразить это. –

Смежные вопросы