В чем разница между использованием rak/rake и rack exec. И который является одним из предпочтительных стилей?
bin/rake db:migrate
bundle exec rake db:migrate
В чем разница между использованием rak/rake и rack exec. И который является одним из предпочтительных стилей?
bin/rake db:migrate
bundle exec rake db:migrate
bundle exec
выполняет команду в контексте вашего приложения.
Поскольку каждое приложение может иметь разные версии драгоценных камней. Использование bundle exec гарантирует, что вы используете правильные версии.
Я использую bundle exec
всегда вместо грабли, потому что у меня в моей системе несколько приложений.
Всегда используйте bundle exec rake db:migrate
.
Подробнее об этом можно узнать здесь Официальная документация
bin/rake
является своего рода заглушкой для команды rake из связанных драгоценностей. Он имеет ту же функцию, что и bundle exec rake
. См. http://bundler.io/v1.14/man/bundle-install.1.html и найдите binstubs
для получения дополнительной информации о заглушке. А также обратите внимание, что bin/rake
и bin/rails
являются заглушками, сгенерированными Rails, которые отличаются кодом от заглушек, сгенерированных связующим. Однако все они выполняют одну и ту же цель и имеют ту же функцию.
У вас есть 3 варианта в типичной системе:
bin/rake db:migrate
rake db:migrate
bundle exec db:migrate
Первый вариант - это просто вызов пути к программе rake
, чья пусковая установка может быть найдена в скрытой папке /bin
. Эта пусковая установка обычно представляет собой символическую ссылку на содержимое программы, найденное в вашем каталоге /.rvm
. Вы можете найти его исходное местоположение, выполнив $ which rake
, который даст вам что-то вроде /home/ubuntu/.rvm/gems/[email protected]/bin/rake
.
По умолчанию второй вариант по существу тот же, что и первый для большинства систем. Это то, что называется псевдонимом, который в основном представляет собой сокращенную команду для какой-либо другой программы. Это определяется где-то в ваших настройках оболочки как-то вроде alias rake='/bin/rake'
. Возможно, этот псевдоним указывается на другую программу на вашей машине, поэтому, прежде чем принимать мое слово, проверьте это.
Когда вы используете bundle exec
, вы говорите поставщику, чтобы убедиться, что загружены только драгоценные камни и их указанные версии из вашего Gemfile.lock
. Это будет работать только в том случае, если вы находитесь в каталоге, который содержит Gemfile.lock
или каталог родителей/дедушек и бабушек содержит его.