rails sbundle exec rails s之间有什么区别?人们似乎说bundle exec rails s更好,但为什么呢?同时this post表示rails s更好.

是哪一个?

推荐答案

有时候,当你安装一个gem时,它还附带了一个可执行文件/二进制文件.这些示例包括:railsrakerspecpry等.然而,当您安装了多个版本的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>

Ruby-on-rails相关问答推荐

Rails 6.1、Ruby 3.0.0:测试错误,因为它们无法加载 rexml

在 Rails 中的一次调用中保存多个对象

如何在 VS Code 中自动格式化 Ruby 或 .erb 文件?

错误“未初始化的常量 AWS (NameError)”

监听错误:无法监视目录的更改

验证失败类必须存在

RuboCop:行太长←如何忽略?

未捕获的 ReferenceError:未定义 ReactDOM

rails 控制台无法启动

ActiveRecord::StatementInvalid: PG InFailedSqlTransaction

在 Rails 4.1 中,如何通过枚举符号查找记录?

Rails 自动加载完全大写的名称,如 API

参数错误:范围主体需要可调用

Rails:将activerecord关系转换为数组的正确方法?

将 Rails 应用程序更改为生产环境

判断 DateTime 值是今天、明天还是以后

jbuilder vs rails-api/active_model_serializers 用于 Rails 4 中的 JSON 处理

如何在 Rails 4 中加载供应商assets资源 文件夹?

Ruby on Rails 控制台在加载时挂起

带有自定义列名的 Rails belongs_to