2015-03-22 2 views
11

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

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

+, когда мы нуждаемся расслоение Exec, а когда нет? –

+1

Ответьте на это http://stackoverflow.com/questions/8275885/use-bundle-exec-rake-or-just-rake#answer-8275912 –

+0

Нажмите здесь для получения дополнительных пояснений на https://stackoverflow.com/questions/6588674/what-do-bundle-exec-rake-mean – jso1919

ответ

-2

У вас есть 3 варианта на обычной системе:

  1. bin/rake db:migrate
  2. rake db:migrate
  3. 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 или в каталоге родителей/дедушек и бабушек.

+2

«то же самое, что и первое в большинстве систем» - я очень сомневаюсь в этом (большинство систем имеют этот псевдоним). Вместо этого голый «рейк» будет вызывать это из глобального списка драгоценных камней, а не из этого пакета приложений. –

+1

На самом деле в этом ответе есть доля правды. Rvm действительно путает путь так, чтобы 'rake ...' запускал ваши двоичные файлы проекта.На самом деле есть плагин для rbenv, который позволяет вам делать то же самое. 'which' указывает на RVM/rbenv, который, в свою очередь, указывает на bin, хотя в недавних рекомендациях предлагается указать узел в .bundle/bin, поскольку рельсы имеют собственные скрипты. – PhilT

0

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

1

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

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

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

Вы можете узнать больше об этом здесь Official documentation