为何`rails new`创建的项目中也包含bin/rails可执行文件?
关于Rails全局gem与项目本地可执行文件的疑问解答
全局rails的作用
你猜的没错,全局安装的rails gem核心作用就是生成项目骨架。当你执行rails new my_app时,它会帮你创建整个Rails项目的目录结构、配置文件、Gemfile,以及包含本地可执行文件的bin/目录。
项目里的bin/rails是Rails为每个项目生成的本地绑定脚本,它会优先使用当前项目Gemfile中指定的Rails版本(创建项目时默认和全局rails版本一致),而不是全局安装的版本。后续你修改Gemfile里的Rails版本并执行bundle install后,本地bin/rails会自动适配新版本,完全不受全局rails的影响。
无需全局rails创建项目的方法
当然可以不用安装全局Rails gem,类似PHP里用composer.json搭建项目的思路,有两种常用方式:
1. 基于预定义Gemfile初始化
- 先创建一个空目录,在其中新建
Gemfile,写入指定版本的Rails依赖:source 'https://rubygems.org' gem 'rails', '~> 7.0.0' # 替换成你需要的版本 - 执行
bundle install安装依赖,此时Rails会被安装到项目本地的bundle环境中 - 执行
bundle exec rails new . --force --skip-bundle,用本地的Rails生成项目骨架(--force覆盖当前目录,--skip-bundle避免重复安装)
2. 使用GitHub项目骨架
- 直接克隆一个已有的Rails基础项目仓库(比如社区维护的干净Rails骨架)
- 删除仓库的
.git目录,重置为自己的项目仓库 - 修改
Gemfile中的Rails版本或其他依赖,执行bundle install - 此时项目里的
bin/rails已经可以通过bundle exec bin/rails(或直接./bin/rails,容器环境中可能需要赋予执行权限)正常使用
这种方式和PHP里用composer install搭建项目的逻辑完全一致,都是依赖本地包管理工具完成环境初始化,不需要全局安装框架。
内容的提问来源于stack exchange,提问作者gremo
相关产品推荐
相关产品推荐

