本教程适用于以下操作系统版本

  • Debian 12 (Bookworm)
  • Debian 11 (Bullseye)
  • Debian 10 (Buster)

本页内容

  • 先决条件
  • 安装依赖项
  • 安装 Rbenv
  • 通过 Rbenv 安装 Ruby
  • 安装 Ruby on Rails
  • 创建第一个 Rails 项目 准备数据库用户 创建 Rails 项目
  • 入门套件的 Rails 脚手架
  • 结论
  • 准备数据库用户
  • 创建 Rails 项目

Ruby on Rails(简称 RoR)是一个用 Ruby 编写、基于 MIT 许可证发布的免费开源 Web 应用框架。Rails 是一个全栈 Web 框架,可轻松构建企业级应用。Rails 内置了多种工具,方便开发者轻松创建前端和后端应用。Ruby on Rails 还具备内置的安全特性,例如针对 SQL 注入、XSS 和 CSRF 等常见攻击的防护。

Ruby on Rails 为数据库、HTML 模板渲染、Web 服务和网页提供了默认结构。它遵循模型-视图-控制器(MVC)架构,并采用诸如 Don't Repeat Yourself (DRY)、Convention over Configuration (CoC) 以及活动记录(active records)模式等知名设计理念。Ruby on Rails 的设计目标是快速、易用且易学,一些知名网站如 Twitch、Airbnb、Github、Soundcloud 等都是使用 Rails 开发的。

在本指南中,我们将带你在 Debian 12 服务器上完成 Ruby on Rails 的安装。你将配合 PostgreSQL 数据库服务器和 Rbenv Ruby 版本管理器来安装 Ruby on Rails。你还将创建一个 scaffold(脚手架),即 Rails 项目的基本结构。

先决条件

在开始之前,请确认你已具备:

  • 一台 Debian 12 服务器。
  • 一个具有 sudo 管理员权限的非 root 用户。

安装依赖项

在第一步,你将在 Debian 服务器上安装一些基础依赖项。其中包括将用作 Rails 项目数据库的 PostgreSQL 数据库服务器、Node.js,以及 Rails 用于编译静态资源的 Yarn 包管理器。

首先,执行以下 apt update 命令来更新并刷新你的软件包索引。

sudo apt update

接下来,使用以下 apt install 命令安装依赖项。其中包括 PostgreSQL 数据库服务器、libpq 驱动、Node.js、Yarn、Git,以及一些系统库和工具。

sudo apt install postgresql libpq-dev nodejs yarnpkg git zlib1g-dev build-essential libssl-dev libreadline-dev libyaml-dev libsqlite3-dev sqlite3 libxml2-dev libxslt1-dev libcurl4-openssl-dev software-properties-common libffi-dev

输入 y 以确认并继续安装。

在 Debian 12 上安装 Ruby on Rails

依赖项安装完成后,使用以下命令检查 PostgreSQL 服务器状态。这将确保 PostgreSQL 在你的 Debian 机器上正在运行并已启用。

sudo systemctl is-enabled postgresql
sudo systemctl status postgresql

如果 PostgreSQL 已启用,你应该会看到 enabled 的输出。当 PostgreSQL 正在运行时,你应该会看到 active(running) 或 active(exited) 的输出。

在 Debian 12 上安装 Ruby on Rails

最后,执行以下命令检查 Node.js 和 Yarn 包管理器。

node --version
yarnpkg --version

在本示例中,安装的是 Node.js 18 和 Yarn 1.22。

在 Debian 12 上安装 Ruby on Rails

安装 Rbenv

安装完软件包依赖后,下一步是安装 Rbenv——一个面向类 Unix 操作系统的 Ruby 版本管理器。借助 Rbenv,你可以轻松管理 Ruby 应用的环境,还可以在系统上安装多个 Ruby 版本。

使用以下命令登录到你的用户。

su - user

通过以下 git 命令下载 rbenv 源代码和 ruby-build 插件。

git clone https://github.com/rbenv/rbenv.git ~/.rbenv
git clone https://github.com/rbenv/ruby-build.git ~/.rbenv/plugins/ruby-build

现在执行以下命令,向你的 shell 添加自定义 PATH。

echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bashrc
echo 'eval "$(rbenv init -)"' >> ~/.bashrc
echo 'export PATH="$HOME/.rbenv/plugins/ruby-build/bin:$PATH"' >> ~/.bashrc

重新加载 ~/.bashrc 配置以使更改生效。执行该命令后,你的 rbenv 安装应该会被激活。

source ~/.bashrc

通过执行以下 rbenv 命令来验证 rbenv。如果 rbenv 安装成功,你应该会看到可用的 rbenv 命令/选项。

rbenv commands

在 Debian 12 上安装 Ruby on Rails

通过 Rbenv 安装 Ruby

安装好 Rbenv 后,你现在可以在系统上安装 Ruby 了。借助 Rbenv,你只会将 Ruby 安装到当前环境中,不会影响整个系统。你将把 Ruby 3.2.2 安装到当前用户环境中。

执行以下 rbenv install 命令,将 Ruby 3.2.2 安装到你的系统。

rbenv install 3.2.2

在安装过程中,你应该会看到如下内容:

在 Debian 12 上安装 Ruby on Rails

Ruby 安装完成后,执行以下命令将默认 Ruby 版本设置为 3.2.2。

rbenv global 3.2.2

最后,使用以下命令验证系统上的 Ruby 版本。

ruby -v

如果一切顺利,你应该会看到已安装 Ruby 3.2.2。

在 Debian 12 上安装 Ruby on Rails

安装 Ruby on Rails

至此,你的系统已配置完毕,可以开始在你的 Debian 机器上安装 Ruby on Rails 了。在本示例中,你将安装 Ruby on Rails 7.0,并查看官方站点上可用的 Rails 版本列表。

执行以下 gem 命令安装 bundler,然后再安装 Ruby on Rails 7.0.7.2。

gem install bundler
gem install rails -v 7.0.7.2

在安装过程中,你应该会看到类似以下的输出:

在 Debian 12 上安装 Ruby on Rails

在 Debian 12 上安装 Ruby on Rails

现在运行以下 rbenv 命令,重新生成哈希(rehash)并重新加载当前环境。

rbenv rehash

最后,执行以下 rails 命令,确认 Ruby on Rails 已安装。

rails version
rails -h

如果安装成功,你应该会看到当前的 Rails 版本以及 rails 命令的帮助页面。

在 Debian 12 上安装 Ruby on Rails

创建第一个 Rails 项目

在本节中,你将学习如何使用 Ruby on Rails 创建你的第一个项目。你将使用 PostgreSQL 作为 Rails 项目的默认数据库。为此,你必须完成以下步骤:

  • 为应用准备 PostgreSQL 用户。
  • 创建第一个 Rails 项目。

准备数据库用户

首先,你必须创建一个供 Rails 应用使用的新 PostgreSQL 用户。该用户必须具有创建数据库和用户的权限。

回到你的用户账户,并使用以下命令登录 PostgreSQL 服务器。

sudo su
sudo -u postgres psql

现在创建一个名为 bob、密码为 p4sswordbob 的新用户。然后,为该用户 bob 授予创建数据库和角色的权限。

CREATE USER bob WITH PASSWORD 'p4sswordbob';
ALTER USER bob CREATEDB CREATEROLE;

在 Debian 12 上安装 Ruby on Rails

使用以下命令验证 PostgreSQL 服务器上的用户列表及权限。

\du

你应该会看到用户 bob 拥有 CREATEDB 和 CREATEROLE 权限。

在 Debian 12 上安装 Ruby on Rails

输入 \q 退出 PostgreSQL 服务器。

最后,登录到你的用户,并执行以下 psql 命令,以新用户 bob 的身份登录 PostgreSQL 服务器。

su - user
psql -U bob -h 127.0.0.1 -d postgres

连接到 PostgreSQL 服务器后,执行以下查询来验证你的连接信息。

\conninfo

你应该会看到你已以用户 bob 的身份连接到 PostgreSQL 服务器。

在 Debian 12 上安装 Ruby on Rails

输入 \q 退出 PostgreSQL 服务器。

创建 Rails 项目

创建好 PostgreSQL 用户后,你现在可以通过 rails 命令行工具开始创建一个新的 Rails 项目。

要创建一个新的 Rails 项目,运行以下 rails 命令。在本示例中,你将创建一个名为 testapp 的新项目,并使用默认的 PostgreSQL 数据库。

rails new testapp -d postgresql

该命令的输出应类似如下:

在 Debian 12 上安装 Ruby on Rails

项目创建完成后,新的目录 ~/testapp 也会被创建。进入 ~/testapp 目录,并使用你惯用的文本编辑器打开数据库配置文件 config/database.yml。

cd testapp/
nano config/database.yml

修改 development、test 和 production 的默认数据库设置。请务必填入你的 PostgreSQL 用户名和密码。

development:
  <<: *default
  database: testapp_development
  # The specified database role is being used to connect to postgres.
  # To create additional roles in postgres see `$ createuser --help`.
  # When left blank, postgres will use the default role. This is
  # the same name as the operating system user running Rails.
  username: bob
  # The password associated with the postgres role (username).
  password: p4sswordbob
  # Connect on a TCP socket. Omitted by default since the client uses a
  # domain socket that doesn't need configuration. Windows does not have
  # domain sockets, so uncomment these lines.
  host: localhost
  # The TCP port the server listens on. Defaults to 5432.
  # If your server runs on a different port number, change accordingly.
  port: 5432

完成后保存并退出文件。

现在运行以下 rails 命令来迁移数据库。这将为你的 testapp 项目自动创建一个新数据库。

rails db:setup
rails db:migrate

以下为 testapp 项目数据库迁移过程中的输出。

在 Debian 12 上安装 Ruby on Rails

数据库迁移完成后,执行以下 rails 命令来运行 testapp 项目。这将在你的 IP 地址的 3000 端口上运行 testapp。

rails server -b 192.168.10.15

在以下输出中,你应该会看到 testapp 正在运行。

在 Debian 12 上安装 Ruby on Rails

现在打开你常用的网页浏览器,访问你的服务器 IP 地址加上 3000 端口,例如 http://192.168.10.15:3000/ 。如果安装成功,你应该会看到 Ruby on Rails 默认的 index.html 页面。

在 Debian 12 上安装 Ruby on Rails

按 Ctrl+c 终止你的 Rails 应用。

入门套件的 Rails 脚手架

scaffold(脚手架)是一种自动生成 Rails 项目基本结构的方式,其中包括控制器(controller)、模型(model)和视图(view)。

执行以下 rails 命令,创建一个包含 title、author 和 publication_year 三个字段的 books 脚手架。

rails g scaffold books title:string author:string publication_year:integer

在 Debian 12 上安装 Ruby on Rails

现在使用以下 rails 命令迁移数据库以应用更改。

rails db:migrate

在 Debian 12 上安装 Ruby on Rails

接下来,通过执行以下 rails server 命令来运行你的 Rails 项目。

rails server -b 192.168.10.15

testapp 运行后,通过 URL 路径 /books 查看 books 脚手架,例如 http://192.168.10.15:3000/books 。如果一切顺利,你应该会看到类似以下生成的脚手架:

在 Debian 12 上安装 Ruby on Rails

你现在可以像下面这样向 books 脚手架插入新数据:

在 Debian 12 上安装 Ruby on Rails

结论

综上所述,你已经在 Debian 12 服务器上配合 PostgreSQL 数据库服务器和 Rbenv 完成了 Ruby on Rails 的安装。你还学习了如何为 Rails 项目生成基本结构的脚手架。