Ruby on rails “与”的区别是什么;轨道s";及;bundle exec rails s";?

Ruby on rails “与”的区别是什么;轨道s";及;bundle exec rails s";?,ruby-on-rails,ruby,bundler,Ruby On Rails,Ruby,Bundler,rails和bundle-exec-rails之间有什么区别?人们似乎说bundle exec rails更好,但为什么呢?同时说rails s更好 它是哪一个?bundle exec确保您从GEM文件中的GEM触发命令 对于rails命令可能没有多大用处,但对于rake来说肯定是必需的。-rails 3附带bundler的烘焙支持,有时在安装gem时还附带可执行文件/二进制文件。例如:rails、rake、rspec、pry等。但是,当您安装了多个版本的gem时,您将有多个版本的这些可执行文件

rails和
bundle-exec-rails之间有什么区别?人们似乎说bundle exec rails更好,但为什么呢?同时说
rails s
更好


它是哪一个?

bundle exec
确保您从GEM文件中的GEM触发命令


对于
rails
命令可能没有多大用处,但对于
rake
来说肯定是必需的。

-rails 3附带bundler的烘焙支持,有时在安装gem时还附带可执行文件/二进制文件。例如:rails、rake、rspec、pry等。但是,当您安装了多个版本的gem时,您将有多个版本的这些可执行文件。因此,如果您想要为给定的rails应用程序执行这些二进制文件中的一个,您可能需要消除您想要的可执行文件的歧义——例如,rake v10.1或rake v10.2的可执行文件。由于这个问题的答案可以通过Gemfile.lock文件(由bundler创建)中的gem版本发现,因此bundler提供了一个命令,用于根据当前项目的Gemfile.lock中指定的版本执行二进制文件。此命令是
bundle exec

因此,对于大多数命令,您都需要运行
bundle exec
,以确保为项目运行正确的版本(同时确保所有依赖项也从Gemfile.lock中指定的正确版本加载)。这条规则的一个臭名昭著的例外是
rails
命令。原因是
rails
命令要做的第一件事就是加载bundler并检查要执行的命令的版本。所以在运行rails命令时,您实际上只是放慢了速度,首先要涉及bundler

因此,简而言之,使用:

rails server
rails console
bundle exec <some command that isn't rails>
rails服务器
轨道控制台

bundle exec您的意思是,如果我只使用
rails s
,我可能会触发另一个没有在Gemfile中声明的rails?对于rails,是的,因此bundle exec不会伤害
rails
,但是没有任何用处。看这个,您能详细说明一下吗?它会触发一个错误版本的rails吗?谢谢你的回答,
rails命令的作用是加载bundler并检查要执行哪个版本的命令。怎么检查?还使用gemfile.lock吗?@Kit Ho,是的。Gemfile.lock指定rails的版本,由于rails对rails应用程序至关重要,因此
rails
命令会进行内省,为您做正确的事情。另一方面,Rake并不是100%特定于rails的,所以它不会尝试进行内省。