rails s
和bundle exec rails s
之间有什么区别?人们似乎说bundle exec rails s
更好,但为什么呢?同时this post说rails s
更好。
这是什么?
答案 0 :(得分:28)
有时当你安装gem时,它也带有可执行文件/二进制文件。这些示例包括: rails , rake , rspec , pry 等。但是,当您有多个版本时安装了一个宝石,然后会有这些可执行文件的多个版本。因此,如果您想为给定的rails应用程序执行这些二进制文件中的一个,您可能需要消除所需的可执行文件 - 例如rake v10.1或rake v10.2。由于您的Gemfile.lock文件(由bundler创建)中的gem版本可以发现对此的答案,因此bundler提供了一个命令,用于根据当前项目的Gemfile中指定的版本执行二进制文件。锁。此命令为bundle exec <command>
。
因此,对于大多数命令,您需要运行bundle exec <command>
以确保为项目运行正确的版本(并确保所有依赖项也从您指定的正确版本中加载) Gemfile.lock的)。这条规则的一个臭名昭着的例外是rails
命令。原因是rails
命令的第一件事就是加载bundler并检查要执行的命令版本。因此,当你运行 rails 命令时,你真的只是让自己放慢速度,以便首先涉及捆绑器。
因此,简而言之,请使用:
rails server
rails console
bundle exec <some command that isn't rails>
答案 1 :(得分:4)
bundle exec
可确保您从Gemfile中的gem中触发命令。
可能对rails
命令没用,但例如rake
肯定需要。
答案 2 :(得分:1)
http://bundler.io/v1.5/rails3.html - Rails 3附带捆绑包