Rails 写了个小工具,免安装 Ruby & Rails 开发环境,一键创建项目。

canonpd · 2024年12月31日 · 最后由 VirtumartOz 回复于 2025年01月03日 · 252 次阅读

项目地址:https://github.com/clwy-cn/rails-docked

Rails Docked

一个基于 Docker 的 Rails 开发环境,让你在任何操作系统上都能轻松开发 Rails 应用。

为什么选择 Rails Docked?

  • 🚀 完全隔离的开发环境,避免系统依赖冲突
  • 🔥 预配置中国区镜像源,解决网络问题
  • 💪 内置常用开发依赖,无需繁琐配置
  • 🎯 支持所有主流操作系统(Windows / macOS / Linux)

安装 Rails 开发环境,对于新手来说,非常棘手:

  • 在中国大陆,由于网络环境不够友好,导致安装 RubyRubyGems 非常困难。
  • Rails 项目开发中,经常需要安装一些由 CRust 等语言开发的 Gem 包。这些包在 Windows 中编译安装非常困难。
  • 对于一些老旧 macOS,无法使用 Homebrew 正确安装第三方依赖。例如 Active Storage 中所需要的图片分析工具 vips,在 macOS Monterey 上已无法正确安装了。

为了让大家无论使用什么操作系统的电脑,都能简单、顺利的开发 Ruby On Rails 应用,于是有了 Rails Docked 这个项目。其中,主要参考了 Docked Rails CLI 的相关配置。

环境说明

预置环境包含:

  • Ruby 3.4.1(默认开启 YJIT)
  • Rails 8.0.1
  • Node 22.12.0 + Yarn

预置镜像源包括:

  • apt 命令:阿里云镜像源
  • Ruby Gem:Ruby China 镜像源
  • npm / Yarn:中国镜像源

安装 Docker

首先需要先安装 Docker。如在安装过程出现了问题(常见于 Windows),请参考 Docker 安装教程

创建 Docker 卷

创建一个名为 ruby-bundle-cache 的卷,用于保存 Ruby 项目的依赖包。

docker volume create ruby-bundle-cache

创建项目

macOS、Linux 系统

创建一个名为 docked 的别名:

alias docked='docker run --rm -it \
 -v ${PWD}:/rails \
 -v ruby-bundle-cache:/bundle \
 -p 3000:3000 \
 registry.cn-hangzhou.aliyuncs.com/clwy/rails-docked'

创建 rails 项目:

docked rails new weblog -d postgresql

Windows 系统

使用PowerShell,创建一个名为 docked 的别名:

Function docked { docker run --rm -it -v ${PWD}:/rails -v ruby-bundle-cache:/bundle -p 3000:3000 registry.cn-hangzhou.aliyuncs.com/clwy/rails-docked $args }

创建 rails 项目:

docked rails new weblog -d postgresql

使用 Docker Compose 配置容器

建好后,用编辑器打开 weblog 项目。在项目根目录下,增加 docker-compose.yml 文件,并添加如下内容:

services:
  web:
    image: "registry.cn-hangzhou.aliyuncs.com/clwy/rails-docked"
    ports:
      - "3000:3000"
    depends_on:
      - postgresql
      - redis
    volumes:
      - .:/rails
      - ruby-bundle-cache:/bundle
    tty: true
    stdin_open: true
    command: ["tail", "-f", "/dev/null"]
  postgresql:
    image: postgres:17
    ports:
      - "5432:5432"
    environment:
      POSTGRES_HOST_AUTH_METHOD: trust
    volumes:
      - ./data/pgdata:/var/lib/postgresql/data
  redis:
    image: redis:7.4
    ports:
      - "6379:6379"
    volumes:
      - ./data/redis:/data
volumes:
  ruby-bundle-cache:
    external: true

其中包含:

  • PostgreSQL 17
  • Redis 7.4

修改数据库连接

修改项目中的 config/database.yml 文件,增加如下数据库配置信息,这样才能连接到容器中的数据库:

default: &default
  # ...
  host: postgresql
  username: postgres

启动项目

  • 启动容器
cd weblog
docker-compose up -d
  • 进入容器
docker-compose exec web bash
  • 安装 Ruby Gems
bundle install
  • 创建数据库
rails db:create
  • 使用脚手架,自动生成增删改查功能(可选)
# 创建路由、模型和迁移文件
rails generate scaffold post title:string body:text

# 迁移数据库
rails db:migrate
  • 启动服务
rails s

等待服务顺利启动后,请访问 http://localhost:3000/posts

常见问题

1. 如何更新

docker pull registry.cn-hangzhou.aliyuncs.com/clwy/rails-docked

2. 如何使用 MySQL 数据库?

如果需要使用 MySQL 替代 PostgreSQL,在创建项目时使用 -d mysql 参数,例如

docked rails new weblog -d mysql

并相应修改 docker-compose.yml 中的数据库配置,例如:

services:
  web:
    image: "registry.cn-hangzhou.aliyuncs.com/clwy/rails-docked"
    ports:
      - "3000:3000"
    depends_on:
      - mysql
      - redis
    volumes:
      - .:/rails
      - ruby-bundle-cache:/bundle
    tty: true
    stdin_open: true
    command: ["tail", "-f", "/dev/null"]
  mysql:
    image: mysql:8.3
    ports:
      - "3306:3306"
    environment:
      MYSQL_ALLOW_EMPTY_PASSWORD: "yes"
    volumes:
      - ./data/mysql:/var/lib/mysql
  redis:
    image: redis:7.4
    ports:
      - "6379:6379"
    volumes:
      - ./data/redis:/data
volumes:
  ruby-bundle-cache:
    external: true

同时需要修改 config/database.yml 中的数据库配置:

default: &default
  # ...
  username: root
  password:
  host: mysql

2. 容器启动失败怎么办?

  • 检查端口是否被占用
  • 确保 Docker 服务正在运行
  • 查看容器日志:docker-compose logs

3. macOS、Linux 下如何设置 docked 别名?

在 macOS 和 Linux 系统中,可以通过以下方式设置别名:

# 编辑配置文件(根据你使用的 shell 选择合适的文件)
# 如果使用 bash,编辑 ~/.bashrc
# 如果使用 zsh,编辑 ~/.zshrc

# 在配置文件中添加以下内容
alias docked='docker run --rm -it \
 -v ${PWD}:/rails \
 -v ruby-bundle-cache:/bundle \
 -p 3000:3000 \
 registry.cn-hangzhou.aliyuncs.com/clwy/rails-docked'

# 使配置生效
source ~/.bashrc  # 如果使用 bash
# 或
source ~/.zshrc   # 如果使用 zsh

3. Windows 下如何设置 docked 别名?

在 Windows 系统中,可以通过以下方式设置 PowerShell 别名:

# 查看 PowerShell 配置文件的路径
echo $PROFILE
# 输出类似:C:\Users\用户名\Documents\WindowsPowerShell\Microsoft.PowerShell_profile.ps1

# 如果该文件不存在,可以使用命令创建
New-Item -Path $PROFILE -Type File -Force

# 用你喜欢的编辑器打开该文件,添加以下内容
Function docked { docker run --rm -it -v ${PWD}:/rails -v ruby-bundle-cache:/bundle -p 3000:3000 registry.cn-hangzhou.aliyuncs.com/clwy/rails-docked $args }

注意:在运行 docked rails new xxx 命令时,有可能碰到提示:

无法加载文件 C:\Users\用户名\Documents\WindowsPowerShell\Microsoft.PowerShell_profile.ps1,因为在此系统上禁止运行脚本。

如果碰到这个错误,需要用管理员身份打开 PowerShell,然后运行:

Set-ExecutionPolicy RemoteSigned
# 接着按 A 键继续

许可证

本项目采用 MIT 许可证

前排学习,入门门槛对于其他语言来讲,有点点高

兄弟们,Github Star 点起来。😀 😀 😀

Julie 回复

是啊,环境安装劝退了五成人。😇

新手直接用 docker,感觉包袱有点重

haohaodehao 回复

我安利无数人试试 ruby。但 90% 的人都是 windows,装个环境就直接劝退了。

canonpd 回复

两面性吧,docker 一把梭实际上也掩盖了大量细节,他们同样会很懵,就敲几个命令项目就跑起来了?

刚打瞌睡 枕头就递过来了👍

执行 docker-compose up -d 后 显示 parsing C:\Users\inven\weblog\docker-compose.yml: yaml: line 28: did not find expected key

28 行是 - ./data/redis:/data 属于 redis 块

VirtumartOz 回复

原来是因为最后一个 volumes 缩进问题

这样搞了后 无法在 web 容器内连接 mysql

我的环境是 win12 Docker Desktop 4.24.0

mysql 容器的 ip 是 172.23.0.1,web 容器的 ip 类似 172.18.0.1

能进入 mysql 容器 用 mysql 命令连上 mysqld 服务 然后往 mysql.user 表新增记录 Host 为 172.18.0.1 User 为 root

把 config/database.yml 里 default 块 host 改成<%= ENV.fetch("DB_HOST") { "172.23.0.1" } %>

这样才能正常执行 rails db:create 及以下的命令 并最终跑起来

需要 登录 后方可回复, 如果你还没有账号请 注册新账号