rails s
和bundle exec rails s
之间有什么区别?人们似乎说bundle exec rails s
更好,但为什么呢?同时this post表示rails s
更好.
是哪一个?
rails s
和bundle exec rails s
之间有什么区别?人们似乎说bundle exec rails s
更好,但为什么呢?同时this post表示rails s
更好.
是哪一个?
有时候,当你安装一个gem时,它还附带了一个可执行文件/二进制文件.这些示例包括:rails、rake、rspec、pry等.然而,当您安装了多个版本的gem时,您将有多个版本的这些可执行文件.因此,如果您想为给定的rails应用程序执行这些二进制文件中的一个,您可能需要消除您想要的可执行文件的歧义——rake v10的可执行文件.1或rake v10的版本.例如,2.因为这个问题的答案可以通过你的gem文件中gem的版本来发现.锁定文件(由bundler创建),bundler提供一个命令,用于根据当前项目的GEM文件中指定的版本执行二进制文件.锁这个命令是bundle exec <command>
.
因此,对于大多数命令,您都需要运行bundle exec <command>
,以确保为项目运行正确的版本(同时确保所有依赖项也从Gemfile.lock中指定的正确版本加载).这条规则的一个臭名昭著的例外是rails
命令.原因是rails
命令要做的第一件事是加载bundler并判断要执行的命令版本.因此,在运行rails命令时,首先要让bundler参与进来,这实际上是在放慢速度.
因此,简而言之,使用:
rails server
rails console
bundle exec <some command that isn't rails>