2016-05-04 4 views
4

Я использую rbenv, но другие члены команды используют RVM.Dynamic Gemfile Ruby для Rbenv и RVM

При указании версии ruby 2.x.x в Gemfile я делал это:

ruby ENV['RBENV_VERSION'] || '2.2.4' 

который захватывает текущую версию я использую из rbenv и использует его для Gemfile. Однако в производстве он отсутствует и использует указанную версию после ||.

Я искал аналогичный способ сделать это в RVM, конечной целью которого является создание Gemfile, где все разработчики могут использовать свою локальную версию Ruby, а конкретная версия указана для производства.

Это позволит разработчикам использовать rbenv или RVM для проекта, а также не устанавливать новые версии Ruby каждый раз, когда они работают над проектом с установленной версией.

Есть ли пользователи RVM, которые могут дать мне эквивалент ENV['RBENV_VERSION'] для RVM? Я много искал и не нашел ничего, что мне нравилось.

Лучший ответ, который я вижу, - это использование пользователями RVM версии с именем переменной окружения, согласованным командой и используемым как «Specifying a Ruby version via the environment», а также использование этого в Gemfile.

+0

Учитывая, что конкретная рубиновая версия '2.2.4' является * только * предназначена для производства, а не для разработки, почему это в вашем« Gemfile »в первую очередь?Почему бы не поставить его куда-нибудь более разумным, например 'config/deploy.rb'? –

+0

Я развертываю в Heroku, и, как показывают их документы, я помещаю рубиновую версию в Gemfile, показанную здесь (https://devcenter.heroku.com/articles/ruby-versions). Даже если бы я поставил версию в другом месте, это не отвечает на мой вопрос. Это только переместит проблему в другой файл :) – bideowego

+0

Ahh ok, я понимаю вашу проблему сейчас. (BTW, мое предложение отвечало на вопрос - проблема все еще связана с разделением конфигурации разработки и производства.) Как насчет использования https://github.com/bkeepers/dotenv для хранения версии рубинового разработки? Будет ли это работать? –

ответ

1

Чтобы получить текущую версию Ruby, из любого экземпляра РВМ, вы можете запросить его с помощью этого метода:

rvm list default string | sed s/ruby-// 

Вы также можете использовать быстрые инструменты РВМ для запроса текущей версии

rvm-prompt i v | sed s/ruby-// 

или

rvm-prompt i v p g | sed s/ruby-// 

в зависимости от того, насколько подробно вы хотите разрешить. Документы для команды rvm-prompt можно найти в «rvm-prompt».

Если пользователь решил оставить RVM в своей версии по умолчанию, вы получите эту версию, но если версия Ruby была изменена в RVM, вы получите выбранную в настоящий момент версию.

Вы можете цепи это в любом случае, что ENV['RBENV_VERSION'] используется, например:

`rvm list default string | sed s/ruby-//` || 2.2.4 

Это будет выбрать текущую версию РВМ Ruby, или 2.2.4, если РВМ не показывает версию.

Обратите внимание, что RVM должен существовать (или, по крайней мере, что-то под названием rvm должно быть доступно как исполняемый файл). Если нет, может понадобиться дополнительная оболочка скрипта для обработки ситуации, в которой она не существует и грамотно деградирует.

Лично я люблю иметь его повсюду, включая производственную среду. Это первое, что я устанавливаю на новом экземпляре ОС, даже перед текстовым редактором, а второе, что я делаю, - это установить соответствующую версию Ruby с RVM.

+0

Спасибо. Я благодарю вас за то, что вы действительно ответили на мой вопрос, вместо того, чтобы рассказать мне так много слов: «Вы делаете это неправильно, делайте это вместо этого». Некоторое время это было моим любопытством. – bideowego

+0

@bideowego Эй, я думал, что это отличный вопрос, и я узнал пару новых вещей в этом процессе! Это то, что вы искали, или какая-либо другая часть, на которую не ответили? –

+0

Да @MichaelGaskell, я считаю, что это то, что я искал. В принципе, в RVM можно получить цифровую строку '2.x.x' для использования в Gemfile. Я понимаю, что вы можете просто установить версии Ruby для каждого проекта. Но иногда вы не хотите устанавливать версии патчей только для одного или двух проектов. Добавьте к этому усложнение работы с командами с различными версиями Ruby и presto! Вот откуда взялся этот вопрос: D – bideowego

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