繁体   English   中英

“rails s”和“bundle exec rails s”有什么区别?

[英]What is the difference between “rails s” and “bundle exec rails s”?

rails sbundle exec rails s什么区别? 人们似乎都说bundle exec rails s更好,但为什么呢? 同时这篇文章rails s更好。

这是什么?

有时当你安装gem时它也带有可执行文件/二进制文件。 这些示例包括: railsrakerspecpry等。但是,当您安装了多个版本的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>

bundle exec确保你从Gemfile中的gems触发命令。

可能对rails命令没有用,但是例如rake肯定需要它。

http://bundler.io/v1.5/rails3.html - Rails 3附带了捆绑器支持

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM