You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何`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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.09 00:02:06