部署 Ruby 应用涉及一系列步骤,从选择服务器和操作系统到配置环境变量、安装依赖和启动服务。本章将详细介绍如何将一个 Ruby 应用部署到生产环境中。
选择服务器和操作系统
选择合适的服务器和操作系统对于确保 Ruby 应用的性能和稳定性至关重要。以下是几个需要考虑的因素:
- 服务器类型:根据应用的规模和需求选择合适的服务器类型。对于小型应用,可以选择虚拟专用服务器(VPS),如 DigitalOcean 或 Linode。对于大型应用,可能需要物理服务器或云平台提供的弹性计算资源。
- 操作系统:大多数情况下,Linux 发行版是部署 Ruby 应用的理想选择。Ubuntu 和 CentOS 是两个广泛使用的发行版,它们都提供了丰富的软件包支持和社区资源。
安装必要的软件
在开始部署之前,确保服务器上安装了所有必要的软件和工具。这通常包括:
- Ruby:根据你的应用需求选择合适的 Ruby 版本。可以通过 RVM(Ruby Version Manager)或 rbenv 来管理 Ruby 版本。
- 数据库:如果应用需要数据库支持,确保已经安装并配置好相应的数据库软件,如 MySQL、PostgreSQL 或 SQLite。
- Web 服务器:常见的选择有 Nginx 和 Apache,它们可以作为反向代理来处理静态文件请求,并将动态请求转发给应用服务器。
- 应用服务器:Puma、Unicorn 或 Passenger 是常见的选择,它们负责运行 Ruby 应用并处理来自 Web 服务器的请求。
安装 Ruby
以 Ubuntu 系统为例,使用 RVM 安装 Ruby 的步骤如下:
// www.javascriptcn.com code example # 安装 RVM \curl -sSL https://get.rvm.io | bash -s stable # 刷新 shell 环境 source ~/.rvm/scripts/rvm # 安装指定版本的 Ruby rvm install 3.0.0 # 设置默认使用的 Ruby 版本 rvm use 3.0.0 --default
安装数据库
以 PostgreSQL 为例:
// www.javascriptcn.com code example # 更新软件包列表 sudo apt-get update # 安装 PostgreSQL sudo apt-get install postgresql postgresql-contrib libpq-dev # 启动 PostgreSQL 服务 sudo systemctl start postgresql.service # 设置 PostgreSQL 用户密码 sudo -u postgres psql
在 PostgreSQL 提示符下输入以下命令设置密码:
ALTER USER postgres PASSWORD 'your_password';
退出 PostgreSQL 提示符:
\q
配置环境变量
环境变量可以帮助你在不同的部署环境中轻松地切换配置。可以在应用根目录下的 .env 文件中定义环境变量,并通过 dotenv gem 加载这些变量:
首先,添加 dotenv 到 Gemfile 中:
gem 'dotenv-rails', groups: [:development, :test]
然后运行 bundle install。
在项目根目录下创建 .env 文件,添加如下内容:
DB_HOST=localhost DB_USER=postgres DB_PASS=your_password
在应用代码中加载这些环境变量:
require 'dotenv/load'
配置 Web 服务器和应用服务器
配置 Nginx
安装 Nginx:
sudo apt-get install nginx
编辑 Nginx 配置文件 /etc/nginx/sites-available/default,添加如下内容:
// www.javascriptcn.com code example
server {
listen 80;
server_name your_domain.com;
root /path/to/your/app/public;
index index.html;
location / {
proxy_pass http://localhost:3000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}重启 Nginx 服务:
sudo systemctl restart nginx
配置 Puma
安装 Puma:
bundle add puma
在应用根目录下创建 config/puma.rb 文件,添加如下配置:
// www.javascriptcn.com code example workers Integer(ENV['WEB_CONCURRENCY'] || 2) threads_count = Integer(ENV['MAX_THREADS'] || 5) threads threads_count, threads_count preload_app! rackup DefaultRackup port ENV['PORT'] || 3000 environment ENV['RACK_ENV'] || 'development' on_worker_boot do # Code to run on worker boot end
启动 Puma:
bundle exec puma -C config/puma.rb
自动化部署流程
为了简化部署过程并减少人为错误,可以采用自动化部署工具,如 Capistrano 或 Ansible。
使用 Capistrano
安装 Capistrano:
bundle add capistrano bundle add capistrano-rails bundle add capistrano-bundler bundle add capistrano-passenger bundle add capistrano-rvm
初始化 Capistrano 配置:
cap install
编辑 Capfile 和 config/deploy.rb 文件,根据需要进行配置。
通过上述步骤,你可以将一个 Ruby 应用成功部署到生产环境中。部署过程中要注意安全性、稳定性和可维护性,确保应用能够高效运行。