"rails s"和"bundle exec rails s"有什么区别?

Kit*_* Ho 25 ruby ruby-on-rails bundler

rails s和之间有什么区别bundle exec rails s?人们似乎说这样bundle exec rails s更好,但为什么呢?同时这篇文章rails s的更好.

这是什么?

pdo*_*obb 30

有时当你安装gem时它也带有可执行文件/二进制文件.这些示例包括:rails,rake,rspec,pry等.但是,当您安装了多个版本的gem时,您将拥有这些可执行文件的多个版本.因此,如果您想为给定的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>
Run Code Online (Sandbox Code Playgroud)


apn*_*ing 6

bundle exec确保您从 Gemfile 中的 gem 触发命令。

rails对于命令来说可能没那么有用,但对于rake例如来说肯定是需要的。