如果你希望直接使用 rails new blog 命令(不通过 bundle exec),需要确保系统环境中安装的 Rails 及其依赖完全兼容 Ruby 2.3.1。以下是调整全局环境的方案:

解决方案:全局环境兼容配置

1. 卸载现有 Rails 并清理残留

bash

gem uninstall rails -a  # 卸载所有版本的 Rails
gem cleanup             # 清理残留文件
rbenv rehash            # 刷新 rbenv 命令

2. 安装兼容的依赖包

先安装必要的依赖,确保 Ruby 2.3.1 环境干净:


bash

gem install bundler -v 1.17.3  # 使用 Rails 3.2 兼容的 Bundler 版本
gem install rake -v 10.5.0     # 避免与 Rails 3 冲突的 Rake 版本
gem install activesupport -v 3.2.22.5
gem install journey -v 1.0.4   # 修复 Ruby 2.3+ 的兼容性问题
gem install sprockets -v 2.2.3 # 支持 Ruby 2.3 的最后一个版本

3. 安装兼容版本的 Rails

bash

gem install rails -v 3.2.22.5 -- --without=test unit

4. 验证安装结果

bash

rails -v                # 应输出 Rails 3.2.22.5
which rails             # 应输出 /Users/htt/.rbenv/shims/rails
gem list | grep rails   # 确认只安装了 3.2.22.5 版本

5. 创建新项目

bash

rails new blog -d mysql  # 指定数据库适配器(根据需要修改)
cd blog

修复常见兼容性问题

如果创建项目后遇到错误,可尝试以下修复:

问题 1:ActiveSupport 方法缺失

编辑 config/application.rb,添加:


ruby

require 'active_support/core_ext/object/try'
require 'active_support/core_ext/string/filters'

问题 2:Sprockets 版本冲突

编辑项目的 Gemfile,确保指定:


ruby

gem 'sprockets', '2.2.3'


然后执行:


bash

bundle update sprockets

问题 3:Rails 命令仍无法找到

手动创建软链接:


bash

ln -s $(gem which rails | sed 's|/lib/rails.rb||')/bin/rails $(rbenv root)/shims/rails
rbenv rehash

原理说明

通过先安装兼容的依赖(如 journeysprocketsrake),再安装 Rails,可以避免 Ruby 2.3 与 Rails 3.2 之间的核心冲突。这种方法修改了全局 gem 环境,使 rails 命令可以直接运行。

备选方案:使用别名

如果你不想修改全局环境,可以在 .zshrc 或 .bashrc 中添加别名:


bash

alias rails='bundle exec rails'


这样每次输入 rails 时,实际上执行的是 bundle exec rails,确保使用项目本地的依赖。

最终测试

完成上述步骤后,尝试:


bash

rails new blog
cd blog
bundle install
rails server


如果一切正常,你应该能在浏览器中访问 http://localhost:3000 看到 Rails 欢迎页面。