В чем разница между использованием рейка/рейка и рейка exec rake. И какой предпочтительный стиль?В чем разница между бункером/рейком и пакетом exec rake
bin/rake db:migrate
bundle exec rake db:migrate
В чем разница между использованием рейка/рейка и рейка exec rake. И какой предпочтительный стиль?В чем разница между бункером/рейком и пакетом exec rake
bin/rake db:migrate
bundle exec rake db:migrate
У вас есть 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
или в каталоге родителей/дедушек и бабушек.
«то же самое, что и первое в большинстве систем» - я очень сомневаюсь в этом (большинство систем имеют этот псевдоним). Вместо этого голый «рейк» будет вызывать это из глобального списка драгоценных камней, а не из этого пакета приложений. –
На самом деле в этом ответе есть доля правды. Rvm действительно путает путь так, чтобы 'rake ...' запускал ваши двоичные файлы проекта.На самом деле есть плагин для rbenv, который позволяет вам делать то же самое. 'which' указывает на RVM/rbenv, который, в свою очередь, указывает на bin, хотя в недавних рекомендациях предлагается указать узел в .bundle/bin, поскольку рельсы имеют собственные скрипты. – PhilT
bin/rake
является своего рода заглушкой для команды рейка из связанных драгоценных камней. Он имеет ту же функцию, что и bundle exec rake
. См. http://bundler.io/v1.14/man/bundle-install.1.html и найдите binstubs
для получения дополнительной информации о заглушке. А также обратите внимание, что bin/rake
и bin/rails
- это заглушки, созданные Rails, которые отличаются кодом от заглушек, сгенерированных связующим. Однако все они выполняют одну и ту же цель и имеют ту же функцию.
bundle exec
выполняет команду в контексте вашего приложения. Поскольку каждое приложение может иметь разные версии драгоценных камней. Использование bundle exec гарантирует, что вы используете правильные версии.
Я использую bundle exec
всегда вместо грабли, потому что в моей системе работает несколько приложений.
Всегда пытайтесь использовать bundle exec rake db:migrate
.
Вы можете узнать больше об этом здесь Official documentation
+, когда мы нуждаемся расслоение Exec, а когда нет? –
Ответьте на это http://stackoverflow.com/questions/8275885/use-bundle-exec-rake-or-just-rake#answer-8275912 –
Нажмите здесь для получения дополнительных пояснений на https://stackoverflow.com/questions/6588674/what-do-bundle-exec-rake-mean – jso1919