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

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

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

本教程需要 Ruby 2.6 或 2.7

准备工作

  1. 登录您的 Google Cloud 账号。如果您是 Google Cloud 新手,请创建一个账号来评估我们的产品在实际场景中的表现。新客户还可获享 $300 赠金,用于运行、测试和部署工作负载。
  2. 在 Google Cloud Console 中的项目选择器页面上,选择或创建一个 Google Cloud 项目

    转到“项目选择器”

  3. 确保您的 Google Cloud 项目已启用结算功能

  4. 在 Google Cloud Console 中的项目选择器页面上,选择或创建一个 Google Cloud 项目

    转到“项目选择器”

  5. 确保您的 Google Cloud 项目已启用结算功能

  6. 安装 Google Cloud CLI。
  7. 如需初始化 gcloud CLI,请运行以下命令:

    gcloud init

为 Rails 设置本地环境

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

  1. 安装 Ruby 2.6 版或 2.7 版。

  2. 安装 Rails 5 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. 使用 Bundler 安装依赖项。

     bundle install
    
  2. 启动本地网络服务器。

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

您可以从页面上显示的示例应用中看到“耶!您正在使用 Rails!”消息。

新 Rails 应用运行的屏幕截图

添加简单页面

现在,将欢迎页面添加到生成的 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 应用后,您可能需要读取日志。您可以通过使用 Cloud Console 中的日志浏览器或使用 gcloud app logs read 来读取应用日志。如需了解详情,请参阅使用 gcloud CLI 读取日志

清理资源

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

删除项目

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

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

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

    转到“管理资源”

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

删除 App Engine 版本

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

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

    转到“版本”

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

后续步骤