Используйте bundle exec rake или просто rake?


Я узнал рельсы, используя только команду грабли, как rake db:migrate, однако, я читал, что я должен использовать bundle exec rake ... а не просто rake. Теперь я в замешательстве о том, что использовать.

Я должен использовать bundle exec rake а не просто rake или это просто предпочтение вещь? Любая проницательность была бы очень признательна! Спасибо!

3 71

3 ответа:

bundle exec выполняет команду в контексте вашего комплекта.

это означает, что он использует драгоценные камни, указанные в вашем файле. Большую часть времени, работает bundle exec rake foo имеет те же результаты, как если бы ты просто бежал rake foo, особенно если у вас есть те же драгоценные камни, установленные по всей системе, что и в вашем Gemfile. Тем не менее, некоторые приложения могут указывать разные версии драгоценных камней, чем те, которые вы установили по всей системе, и могут захотеть, чтобы эти точные драгоценные камни и версии могли работать правильно. Если вы просто Беги без bundle exec, вы можете получить некоторые странные ошибки.

используя bundle exec гарантирует, что программа запускается со средой, указанной в gemfile, что, надеюсь, означает, что создатели программы хотят, чтобы она была запущена, что, надеюсь, означает, что она должна работать правильно независимо от того, какие странные настройки у вас есть на вашем компьютере.

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

см.http://bundler.io/v1.3/man/bundle-exec.1.html для получения дополнительной информации.

$ bundle exec rake db: migrate
Использует версию рейка, указанную в Gemfile для выполнения задачи рейка db:migrate.

но в Gemfile не указан камень рейка!
Да, но rake gem был установлен как зависимость от какого-то другого драгоценного камня-посмотрите в Gemfile.замок. Поэтому правило должно быть: использует версию рейка, указанную в Gemfile.замок.

Но Gemfile.блокировка не указывает конкретную версию--это указывает версию больше x. y!
Тогда правило должно быть: использует версию рейка, которая была установлена в текущем gemset.

$ rake db: migrate
Обычно, когда вы вводите команду в командной строке, например rake, ваша система ищет команду в списке каталогов, указанных в переменной среды PATH. Первый каталог, содержащий команду, является версией используемой команды. Чтобы увидеть, что каталог, вы можете сделать:

$ which rake

так что если вы выполняете,

$ rake db:migrate

это мая использовать разные грабли камень, чем тот, который вы установили с bundle install. Но, даже если ваша система находит ту же версию рейка, что и bundle exec, любые драгоценные камни, необходимые для исходного кода грабли будут искать в местах за пределами gemset вашего проекта. Поэтому есть много способов, которые просто:

$ rake db:migrate

может все испортить.

по данным учебник Ruby on Rails (бесплатно онлайн), раздел 3.6, если вы используете rvm 1.11.x+ тогда вам не нужно предисловие команды с bundle exec.

запуск любого точного без bundle exec будет иметь Rubygems извлечения последней версии драгоценного камня, установленного в вашей системе.

добавить bundle exec префикс вместо этого будет иметь исполняемый файл, работающий в контексте вашего Gemfile.блокировка, что означает, что будет выполняться с использованием версии, определенной в файле gem.