В чем разница между бин/рейком и пакетом exec rake

В чем разница между использованием rak/rake и rack exec. И который является одним из предпочтительных стилей?

bin/rake db:migrate
bundle exec rake db:migrate

Ответ 1

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

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

Всегда используйте bundle exec rake db:migrate.

Подробнее об этом можно узнать здесь Официальная документация

Ответ 2

bin/rake является своего рода заглушкой для команды rake из связанных драгоценностей. Он имеет ту же функцию, что и bundle exec rake. См. http://bundler.io/v1.14/man/bundle-install.1.html и найдите binstubs для получения дополнительной информации о заглушке. А также обратите внимание, что bin/rake и bin/rails являются заглушками, сгенерированными Rails, которые отличаются кодом от заглушек, сгенерированных связующим. Однако все они выполняют одну и ту же цель и имеют ту же функцию.

Ответ 3

У вас есть 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 или каталог родителей/дедушек и бабушек содержит его.