一个基于 Docker 的 Rails 开发环境,让你在任何操作系统上都能轻松开发 Rails 应用。
安装 Rails
开发环境,对于新手来说,非常棘手:
Ruby
和 RubyGems
非常困难。Rails
项目开发中,经常需要安装一些由 C
或 Rust
等语言开发的 Gem
包。这些包在 Windows
中编译安装非常困难。macOS
,无法使用 Homebrew
正确安装第三方依赖。例如 Active Storage 中所需要的图片分析工具 vips,在 macOS Monterey
上已无法正确安装了。为了让大家无论使用什么操作系统的电脑,都能简单、顺利的开发 Ruby On Rails
应用,于是有了 Rails Docked
这个项目。其中,主要参考了 Docked Rails CLI 的相关配置。
预置环境包含:
预置镜像源包括:
首先需要先安装 Docker。如在安装过程出现了问题(常见于 Windows),请参考 Docker 安装教程。
创建一个名为 ruby-bundle-cache
的卷,用于保存 Ruby
项目的依赖包。
docker volume create ruby-bundle-cache
创建一个名为 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
使用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
建好后,用编辑器打开 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
其中包含:
修改项目中的 config/database.yml
文件,增加如下数据库配置信息,这样才能连接到容器中的数据库:
default: &default
# ...
host: postgresql
username: postgres
cd weblog
docker-compose up -d
docker-compose exec web bash
bundle install
rails db:create
# 创建路由、模型和迁移文件
rails generate scaffold post title:string body:text
# 迁移数据库
rails db:migrate
rails s
等待服务顺利启动后,请访问 http://localhost:3000/posts
docker pull registry.cn-hangzhou.aliyuncs.com/clwy/rails-docked
如果需要使用 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
docker-compose logs
在 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
在 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 许可证。