Используйте 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.