В чем разница между "rails s" и "bundle exec rails s"?

В чем разница между rails s и bundle exec rails s? Люди, похоже, говорят, что bundle exec rails s лучше, но почему? Между тем этот пост говорит rails s лучше.

Что это?

Ответ 1

Иногда, когда вы устанавливаете драгоценный камень, он также имеет исполняемый/двоичный файл. К ним относятся: rails, rake, rspec, pry и т.д. Однако, когда у вас есть несколько версий установленного gem, вы будете иметь несколько версий этих исполняемых файлов, сидящих вокруг. Поэтому, если вы хотите выполнить один из этих двоичных файлов для данного приложения rails, вам может понадобиться устранить, какой исполняемый файл вы хотите - например, для rake v10.1 или для rake v10.2. Поскольку ответ на это можно обнаружить по версии драгоценного камня, которую вы имеете в своем файле Gemfile.lock(который создается связующим), bundler предоставляет команду для выполнения двоичного файла на основе версии, указанной в текущем проекте Gemfile. замок. Эта команда bundle exec <command>.

Итак, для большинства команд вы хотите запустить bundle exec <command>, чтобы убедиться, что вы используете правильную версию для своего проекта (а также чтобы убедиться, что все зависимости также загружены из правильных версий, указанных в вашем Gemfile. замок). Единственное известное исключение из этого правила - команда rails. Причина в том, что первое, что делает команда rails, - это загрузить пакет и проверить, какую версию команды выполнить. Таким образом, вы действительно просто замедляете себя, чтобы вовлекать спутник в первую очередь при запуске команды rails.

Итак, короче говоря, используйте:

rails server
rails console
bundle exec <some command that isn't rails>

Ответ 2

bundle exec гарантирует, что вы запускаете команды из драгоценных камней в Gemfile.

может быть не так полезен для команды rails, но определенно необходим для rake, например.