RubyMine 2025.2 Help

教程:使用 Capistrano 部署 Rails 应用程序

Capistrano 是一个使用部署脚本部署应用程序的工具。 要执行部署,您可以使用预定义任务或创建自定义 Rake 任务。 RubyMine 允许您通过双击 Ctrl 快速运行 Capistrano 任务,并使用 运行配置 配置 Capistrano 运行选项。 您可以 自定义运行配置 以传递特定任务参数、选择所需的阶段等。

在本教程中,我们将向您展示如何使用 Capistrano 将 示例 Rails 应用程序 部署到远程服务器。 作为应用程序服务器,将使用 Passenger 和 Nginx 的组合。

先决条件

在本教程中,我们将使用两台机器来演示应用程序的部署:

  • 本地机器 :运行 macOS 的 Mac, 已安装 RubyMine 和 创建的命令行启动器。 在 生成凭据 时,需要使用命令行启动器指定编辑器。

  • Web 服务器 :启用了 SSH 访问 并安装了 Git 的 Ubuntu 机器。 在本教程中,Web 服务器具有 sample-web-server 名称,并且具有 deploy 用户和 sudo 权限。

在 Web 服务器上安装 rbenv 和 Ruby

首先,我们需要在 Web 服务器上安装 Ruby 解释器。 我们将使用 rbenvruby-build 插件来完成此操作。 要在服务器上执行所需操作,我们将使用嵌入到 RubyMine 中的终端模拟器。

在 RubyMine 中打开 示例 Rails 应用程序 并按照以下步骤操作。

  1. 转到 工具 | 启动 SSH 会话。 在调用的对话框中,指定 Web 服务器地址和部署用户的凭据。 点击 确定

    SSH 会话
  2. 安装 构建 Ruby 源代码 、安装 Passenger、使用 SQLite 等所需的包。 此外,安装 Node.js 和 Yarn 以管理 JavaScript 依赖项。

    sudo apt-get update sudo apt-get install curl 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 dirmngr gnupg apt-transport-https ca-certificates nodejs yarn
  3. 按照 Basic GitHub Checkout 章节中的描述安装 rbenv。 然后,按照 Installation 中的说明安装编译和安装 Ruby 所需的 ruby-build 插件。

  4. 通过执行以下命令, 安装应用程序使用的 Ruby 发行版

    rbenv install 2.6.3 rbenv global 2.6.3
  5. 最后,安装 Bundler 来管理项目 gems。

    gem install bundler

安装并配置 Passenger 和 Nginx

作为应用程序服务器,我们将使用 Passenger 和 Nginx 的组合。 让我们将它们安装到 Web 服务器并调整其配置。

  1. 要安装 Passenger 包,请执行以下命令。

    #(a) Install the PGP key sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 561F9B9CAC40B2F7 #(b) App the APT repository sudo sh -c 'echo deb https://oss-binaries.phusionpassenger.com/apt/passenger bionic main > /etc/apt/sources.list.d/passenger.list' sudo apt-get update #(c) Install Passenger and Nginx module sudo apt-get install -y libnginx-mod-http-passenger #(d) Make sure the configuration files exist if [ ! -f /etc/nginx/modules-enabled/50-mod-http-passenger.conf ]; then sudo ln -s /usr/share/nginx/modules-available/mod-http-passenger.load /etc/nginx/modules-enabled/50-mod-http-passenger.conf ; fi sudo ls /etc/nginx/conf.d/mod-http-passenger.conf
  2. 现在我们需要将 Passenger 指向正确版本的 Ruby。 使用 Nano 打开 mod-http-passenger.conf 配置文件。

    sudo nano /etc/nginx/conf.d/mod-http-passenger.conf

    然后以以下方式更改 passenger_ruby 选项。

    passenger_ruby /home/deploy/.rbenv/shims/ruby;

    保存 mod-http-passenger.conf 文件并关闭它。

  3. 让我们移除默认的 Nginx 服务器……

    sudo rm /etc/nginx/sites-enabled/default

    ……并为我们的示例应用程序添加一个。

    sudo nano /etc/nginx/sites-enabled/sample_rails_app

    在打开的 sample_rails_app 文件中,指定以下配置。

    server { listen 80; listen [::]:80; server_name _; root /home/deploy/sample_rails_app/current/public; passenger_enabled on; passenger_app_env staging; }
  4. 最后,启动 Nginx 服务。

    sudo service nginx start

安装 Capistrano gems

现在我们准备将 Capistrano 集成到我们的应用程序中。

  1. 首先,我们将创建一个用于部署应用程序的单独分支。 按 Alt+` ,在调用的弹出窗口中选择 分支 ,然后选择 新建分支。 在 创建新分支 对话框中,指定分支名称(在我们的示例中为 capistrano-deploy ),然后单击 创建

    创建新分支对话框
  2. 打开项目 Gemfile 并添加以下 Capistrano gems。

    gem 'capistrano', '3.11.2' gem 'capistrano-rails', '1.4.0' gem 'capistrano-rbenv', '2.1.4 ' gem 'capistrano-passenger', '0.2.0'
  3. 将光标放在任何高亮显示的 gem 上,然后按 Alt+Enter 使用 Bundler 安装它们。

    安装缺失的 gems

Capify 应用程序

在这一部分,我们将初始化 Capistrano 并配置部署脚本。

  1. 要 Capify 应用程序,请从主菜单中选择 工具 | Capistrano | Capify 应用程序。 以下文件将被添加到项目中。

    • Capfile

    • config/deploy.rb

    • staging.rb production.rb 位于 config/environments 目录中

    请注意, 工具 | Capistrano | Capify 应用程序 执行 cap install 命令。 运行此命令后,RubyMine 会创建用于执行 install 任务的运行配置。 如果需要,您可以 自定义此配置 以传递特定参数。

  2. 打开 Capfile 并添加以下行以加载所需的依赖项。

    require "capistrano/rails" require "capistrano/rbenv" require "capistrano/passenger"

    在同一个文件中,为 rbenv 指定以下设置。

    set :rbenv_type, :user set :rbenv_ruby, '2.6.3'
  3. 在配置部署设置之前, 提交并推送 更改到远程存储库。 在我们的教程中,它将是示例 Rails 应用程序的 capistrano-deploy 分支。

  4. 打开 config/deploy.rb 文件。 在这里,您需要指定 Git 存储库的详细信息以及 Web 服务器上的部署路径。

    set :application, "sample_rails_app" set :repo_url, "https://github.com/JetBrains/sample_rails_app" set :branch, "capistrano-deploy" set :deploy_to, "/home/deploy/#{fetch :application}" append :linked_files, "config/master.key"
  5. 最后,打开 config/deploy/staging.rb 并按以下方式修改它以指向我们的 Web 服务器地址。

    server "sample-web-server", user: "deploy", roles: %w{app db web}

提供自定义凭据

由于我们使用的是 staging 配置进行部署,因此我们需要在 Rails 应用程序中添加 staging 环境。 然后,我们应该提供自定义凭据。

  1. 按照 创建 Rails 环境 中的描述创建 staging 环境。 在我们的示例中,创建的配置( config/environments/staging.rb )复制了 开发 配置,除了以下一行。

    config.require_master_key = true

    此选项指定用于解密凭据的主密钥应在我们的 Web 服务器上可用。

  2. 现在我们需要生成加密的 credentials.yml.enc 文件和 master.key 用于 加密/解密。 通过从主菜单中选择 视图|工具窗口|终端 打开本地终端并执行以下命令。

    rails secret EDITOR="mine" bin/rails credentials:edit

    config/master.key config/credentials.yml.enc 文件将被生成。 按照 将文件添加到 Git 中的描述将 config/credentials.yml.enc 文件添加到 VCS。

  3. 由于 config/master.key 文件应放置在 VCS 之外,我们需要创建一个自定义任务将此文件上传到我们的 Web 服务器。 在项目视图 Alt+1 中打开 lib/capistrano/tasks 目录,并创建一个包含以下内容的新 setup.rake 文件。

    namespace :deploy do namespace :check do before :linked_files, :set_master_key do on roles(:app), in: :sequence, wait: 10 do unless test("[ -f #{shared_path}/config/master.key ]") upload! 'config/master.key', "#{shared_path}/config/master.key" end end end end end
  4. 提交并推送 更改到远程存储库。

部署您的应用程序

完成上述所有步骤后,我们准备将 Rails 应用程序部署到 Web 服务器。

  1. 按两次 Ctrl 并在调用的弹出窗口中输入 cap staging deploy。 按 Enter 开始部署。

    cap staging deploy
  2. 等待 Capistrano 完成部署应用程序所需的所有步骤。 您可以在 运行 工具窗口 Alt+4 中查看进度。

    运行工具窗口:部署
  3. 打开浏览器并指定应用程序地址。 在我们的示例中,它将是 http://sample-web-server

    注册页面

在运行 Capistrano 任务后,RubyMine 会自动创建一个特殊的配置文件——一个临时的 运行/调试配置。 您可以 自定义此配置的设置 ,例如,您可以传递任务参数、指定环境变量等。 然后,您可以 保存 自定义配置,以便将来快速运行此配置。

Capistrano 运行/调试配置

当您运行 Capistrano 任务(例如, installdeploy )时,RubyMine 会自动创建一个相应的 Capistrano 临时配置 ,可以保存。 如果必要,您可以从预定义模板中 Capistrano 手动 创建 run/debug 配置。

要自定义 Capistrano 运行/调试配置,请执行以下操作:

  1. 通过以下方法之一打开 运行/调试配置 对话框:

    • 从主菜单中选择 运行 | 编辑配置

    • Navigation bar 可见 (查看 | 外观 | 导航栏) 的情况下,从运行/调试配置选择器中选择 编辑配置

      编辑运行配置
    • 请按 Alt+Shift+F10 然后按 0

  2. 在打开的 运行/调试配置 对话框中,选择 Capistrano 组中的所需配置,并指定其设置。

    运行/调试配置:Capistrano

    例如,您可以在 配置 选项卡中指定以下设置:

    选项

    描述

    任务名称

    请指定要执行的 Capistrano 任务的名称。 请注意,您可以使用 自动补全 Ctrl+Space 查看可用任务。

    示例: deployinstall

    参数

    指定要传递给 Capistrano 任务的参数。 参数应以空格分隔。

    示例: --roles=app,web--hosts=web-server-1,web-server-2

    阶段

    请选择所需的阶段。 阶段可以在 config/deploy.rb 文件中配置,该文件会在 Capify 应用程序 后出现。

    示例: staging生产

    启用调用/执行跟踪,启用完整回溯(--trace)

    启用 --trace Capistrano 命令行选项。

    工作目录

    指定正在运行的任务使用的工作目录。

    环境变量

    环境变量 列表指定为名称-值对,并用分号分隔。 或者,单击省略号按钮,在 环境变量 对话框中创建变量并指定其值。

    Ruby 参数

    指定要传递给 Ruby 解释器的 command-line arguments

    Ruby 解释器

    指定用于运行任务的 Ruby 解释器。 您可以选择项目默认的 Ruby 解释器,或者从已配置的 Ruby 解释器列表中选择一个不同的解释器。

最后修改日期: 2025年 9月 26日