Используйте bundle exec rake или просто rake?
Я узнал рельсы, используя только команду грабли, как rake db:migrate
, однако, я читал, что я должен использовать bundle exec rake ...
а не просто rake
. Теперь я в замешательстве о том, что использовать.
Я должен использовать bundle exec rake
а не просто rake
или это просто предпочтение вещь? Любая проницательность была бы очень признательна! Спасибо!
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.