Qual é a diferença entre "rails s" e "bundle exec rails s"?

Qual é a diferença entre rails s e bundle exec rails s? As pessoas parecem dizer que bundle exec rails s é melhor, mas porquê? Entretanto este post diz rails s é melhor.

Qual é?

Author: Andrew Marshall, 2014-05-24

3 answers

Às vezes, quando se instala uma jóia, ela também vem com um executável/binário. Exemplos destes incluem: Carris, ancinho, rspec, pry , etc. No entanto, quando você tiver várias versões de uma jóia instalada, você então terá várias versões destes executáveis sentados ao redor. Então, se você quiser executar um desses binários para um determinado aplicativo de trilhos, você pode precisar desambiguar qual executável você quer -- o de rake v10.1 ou o de rake v10. 2, por exemplo. Uma vez que a resposta para isso é possível descobrir pela versão da gema que você tem em seu Gemfile.lock file (que é criado por bundler), bundler fornece um comando para a execução de um binário com base na versão que é especificada no Gemfile do projeto atual.bloquear. Este comando é bundle exec <command>.

Por isso, para a maioria dos comandos, irá querer executar {[[1]} para se certificar de que está a correr a versão certa para o seu projecto (e também para se certificar de que todas as dependências também são carregadas a partir da versão correcta versões especificadas no seu Gemfile.bloquear). A única exceção notória a esta regra é o comando rails. A razão é que a primeira coisa que o comando rails faz é carregar o bundler e verificar qual a versão do comando a executar. Então, você estaria realmente se atrasando para envolver bundler, em primeiro lugar, ao executar o comando rails.

Então, em resumo, use:

rails server
rails console
bundle exec <some command that isn't rails>
 23
Author: pdobb, 2015-06-30 18:01:10

bundle exec garante que estás a accionar comandos de pedras preciosas no teu ficheiro Gemfile.

Pode não ser assim tão útil para rails comando, mas é definitivamente necessário para rake por exemplo.

 4
Author: apneadiving, 2014-05-24 15:06:28