在 App Engine 柔性环境中运行 Rails 7

开始开发在 App Engine 柔性环境中运行的 Ruby on Rails 应用。 您创建的应用将在支持所有 Google 产品的同一基础架构上运行,因此您可以放心,这些应用能顺畅扩容,以满足所有用户(无论是几个还是几百万个)的需求。

本教程假设您熟悉 Rails 网页开发,并将引导您部署新的 Rails 应用。

本教程支持并需要 Ruby 3.0 或更高版本。

准备工作

  1. 登录您的 Google Cloud 账号。如果您是新手 Google Cloud, 请创建一个账号来评估我们的产品在 实际场景中的表现。新客户还可获享 $300 赠金,用于 运行、测试和部署工作负载。
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator role (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  3. Verify that billing is enabled for your Google Cloud project.

  4. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator role (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  5. Verify that billing is enabled for your Google Cloud project.

  6. 安装 Google Cloud CLI。

  7. 如果您使用的是外部身份提供方 (IdP),则必须先使用联合身份登录 gcloud CLI

  8. 如需初始化 gcloud CLI,请运行以下命令:

    gcloud init

为 Rails 设置本地环境

如需为 Rails 开发设置本地环境,您需要执行以下操作:

  1. 安装 Ruby 3.0 或更高版本。

  2. 安装 Rails 7 gem。

  3. 安装 Bundler gem。

或者,您也可以使用 Cloud Shell, 它包含 Ruby、Rails 以及前面已安装的 Google Cloud CLI。

如需详细了解如何安装 Rails 及其依赖项,请参阅 官方 Rails 入门 指南。

满足前提条件后,您可以创建和部署 Rails 应用。以下部分将引导您配置、运行和部署应用。

创建新应用

  1. 创建新的 Rails 示例应用。

    rails new appengine_example
    
  2. 转到包含示例代码的目录。

    cd appengine_example
    

在本地运行应用

要在本地计算机上运行新 Rails 应用,请执行以下操作:

  1. 启动本地 Web 服务器。

     bundle exec rails server
    
  2. 在浏览器中,转到 http://localhost:3000/

    示例应用会显示 Rails 徽标以及 Rails 和 Ruby 版本。

添加简单页面

现在,将欢迎页面添加到生成的 Rails 应用。

  1. 要为新页面生成基架,请通过 index 操作创建名为 WelcomeController 的新 Rails 控制器。

    bundle exec rails generate controller Welcome index
    
  2. 打开文件 app/views/welcome/index.html.erb 以查看以下样板 HTML。

    <h1>Welcome#index</h1>
    <p>Find me in app/views/welcome/index.html.erb</p>
  3. 根据需要修改文件。例如,您可以使用以下内容:

    <h1>Welcome</h1>
    <p>This is a home page for a new Rails App on Google Cloud Platform!</p>
  4. index 控制器操作设置为 Rails 的根操作。 然后,每当用户访问 Rails 应用时,他们就会看到欢迎页面。

  5. 打开文件 config/routes.rb 可查看以下生成的内容。

    Rails.application.routes.draw do
      get 'welcome/index'
    
      # For details on the DSL available within this file, see http://guides.rubyonrails.org/routing.html
    end
  6. 要修改此文件,请添加 root 'welcome#index'

    Rails.application.routes.draw do
      get 'welcome/index'
    
      # For details on the DSL available within this file, see http://guides.rubyonrails.org/routing.html
      root 'welcome#index'
    end
  7. 保存并关闭文件。像以前那样测试 Rails 应用。

将应用部署到 App Engine 柔性环境

App Engine 柔性环境使用名为 app.yaml 的文件来描述应用的部署配置。如果此文件不存在,则 gcloud CLI 会尝试推测部署配置。但是,建议您最好提供该文件,因为 Rails 在生产环境中需要密钥。

如需配置示例应用以便将其部署到 App Engine 中,请在示例应用目录的根目录下创建一个名为 app.yaml 的新文件,并添加以下内容:

entrypoint: bundle exec rackup --port $PORT
env: flex
runtime: ruby

配置 Rails 密钥

在生产环境中部署 Rails 应用时,请将环境变量 SECRET_KEY_BASE 设置为用于保护用户会话数据的密钥。此环境变量在 config/secrets.yml 文件中读取。

  1. 生成新的密钥。

    bundle exec rails secret
    
  2. 复制生成的密钥。您会在后续步骤中用到该密钥。

  3. 打开先前创建的 app.yaml 文件,然后添加 env_variables 部分。env_variables 用于设置 App Engine 柔性环境中的 production 环境变量。app.yaml 文件的内容应类似如下示例,其中 [SECRET_KEY] 应替换为您复制的密钥。

    entrypoint: bundle exec rackup --port $PORT
    env: flex
    runtime: ruby
    
    env_variables:
      SECRET_KEY_BASE: [SECRET_KEY]

设置 App Engine 柔性环境应用

如果这是您第一次部署应用,您需要创建 App Engine 柔性环境应用来帮助您选择要运行 Rails 应用的区域。要了解详情,请参阅 区域和可用区

  1. 创建 App Engine 应用。默认情况下,以下命令会创建两个实例:

    gcloud app create
    
  2. 选择支持 Ruby 版 App Engine 柔性环境应用的区域。

部署到 App Engine 柔性环境

通过运行以下命令部署示例应用:

gcloud app deploy

等待消息通知您更新已完成。此过程可能需要几分钟。

访问已部署的 Rails 应用

  1. 要检索项目 ID,请运行 gcloud info

  2. 在浏览器中,输入以下网址:

    https://PROJECT_ID.REGION_ID.r.appspot.com

    替换以下内容:

页面中会显示以下内容。

新 Rails 应用运行的屏幕截图

在此期间,您的请求由在 App Engine 柔性环境中运行的 Rails 应用处理。

此命令按照 app.yaml 中的说明部署应用,并将新部署的版本设置为默认版本,从而使其能够为所有新流量提供服务。在应用部署时,您可能会在平台检查应用是否提供服务时看到多条重复消息。这很正常。等待应用更新已完成的通知消息。

如果您更新应用,则只需输入您在首次部署应用时使用的命令,即可部署更新后的版本。新部署会创建应用的新版本并将其提升为默认版本。应用的旧版本仍会保留,与其关联的虚拟机实例也是一样。 请注意,所有这些应用版本和虚拟机实例都属于可计费资源。

读取 App Engine 日志

部署 Rails 应用后,您可能需要读取日志。如需读取应用日志,您可以使用控制台中的 Google Cloud Logs Explorer,也可以使用gcloud app logs read。如需了解详情,请参阅使用 gcloud CLI 读取日志

清理资源

完成本教程后,您可以清理您创建的资源,让它们停止使用配额,以免产生费用。以下部分介绍了如何删除或关停这些资源。

删除项目

为了避免产生费用,最简单的方法是删除您为本教程创建的项目。

要删除项目,请执行以下操作:

  1. 在 Google Cloud 控制台中,前往 管理资源 页面。

    转到“管理资源”

  2. 在项目列表中,选择要删除的项目,然后点击删除
  3. 在对话框中输入项目 ID,然后点击 关停 以删除项目。

删除 App Engine 版本

要删除应用版本,请执行以下操作:

  1. 在 Google Cloud 控制台中,打开 App Engine 的版本页面。

    转到“版本”

  2. 选中要删除的非默认应用版本对应的复选框。
  3. 如需删除应用版本, 请点击 删除

后续步骤