为何新建Rails 7.0.2.4应用自带bin/dev而7.0.3版本没有?
关于Rails不同版本
bin/dev文件自带情况差异的说明 版本间文件存在差异的核心原因
这个区别不是Rails版本迭代做了功能删减,是生成器的bug修复导致的:
- Rails 7.0.2.4版本的应用生成器存在逻辑问题:无论你新建应用时选的是哪种前端方案,哪怕是默认不需要额外编译进程的importmap方案,都会错误生成
bin/dev文件。 - 7.0.3版本修复了这个逻辑偏差:只有当你新建应用时选择了需要实时编译的前端工具链(比如通过
--javascript esbuild/rollup/webpack启用jsbundling,或是启用了cssbundling搭配Tailwind、PostCSS等需要监听文件变动自动构建的CSS工具),生成器才会自动创建bin/dev文件。如果选默认的importmap方案,不会生成这个多余的文件。
bin/dev的作用与依赖组件
bin/dev本身不是Rails的核心内置命令,只是一个普通的可执行shell脚本,没有什么复杂的黑魔法:
- 它的核心作用是调用
foremangem,一次性加载项目根目录下Procfile.dev中定义的所有开发环境进程,不用开发者开多个终端标签分别启动服务。 - 常规带前端编译的Rails项目里,
Procfile.dev一般会定义两个进程:一个是常规的rails server启动Web服务,另一个是yarn build --watch持续监听JS/CSS文件变动,自动完成增量编译,避免每次改完前端代码手动执行预编译命令。 - 它的依赖非常简单:一是开发环境的gem依赖里包含
foreman,二是项目根目录存在合法的Procfile.dev配置文件,不需要和Rails的其他特殊机制做深度绑定。
开发环境的使用建议
- 如果你用的是Rails默认的importmap前端方案,没有引入需要实时构建的JS/CSS工具链,直接执行
rails server启动服务就足够,有没有bin/dev完全不影响开发流程。 - 如果你用了jsbundling/cssbundling方案,但当前版本的Rails没有自动生成
bin/dev,手动补全即可:先在Gemfile的开发环境分组中添加gem "foreman"执行bundle install,再在bin/目录下创建dev脚本、赋予可执行权限,写入foreman加载Procfile.dev的对应逻辑即可,功能和Rails自动生成的文件完全一致。
内容的提问来源于stack exchange,提问作者stevec
相关产品推荐
相关产品推荐

