在 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。

或者,您可以使用已預先安裝 Ruby、Rails 和 Google Cloud CLI 的 Cloud Shell

如要進一步瞭解如何安裝 Rails 及其依附元件,請參閱官方的「開始使用 Rails」指南。

完成事前準備後,您就能建立及部署 Rails 應用程式。以下各節將逐步引導您設定、執行及部署應用程式。

建立新的應用程式

  1. 建立新的 Rails 範例應用程式。

    rails new appengine_example
    
  2. 前往包含範例程式碼的目錄。

    cd appengine_example
    

在本機執行應用程式

如何在本機電腦上執行新的 Rails 應用程式:

  1. 啟動本機網路伺服器。

     bundle exec rails server
    
  2. 在瀏覽器中前往 http://localhost:3000/

    範例應用程式會顯示 Rails 標誌,以及 Rails 和 Ruby 版本。

新增簡易頁面

接著來為 Rails 應用程式新增歡迎頁面。

  1. 如要產生新頁面的鷹架,請建立名為 WelcomeController 且包含 index 動作的新 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 中描述的應用程式,並將新部署的版本設為預設版本,將其用來處理所有新流量。 在部署應用程式的同時,平台會檢查應用程式是否可提供服務,在這段期間,您可能會收到幾則重複的訊息。這是正常的狀況。請等候應用程式更新完成通知訊息。

若您更新了應用程式,您可以輸入第一次部署應用程式時使用的指令來部署更新版本。新的部署作業會為您的應用程式建立新版本,並將這個新版本晉升為預設版本。應用程式的較舊版本和相關聯的 VM 執行個體都會保留下來。請注意,這些應用程式版本和 VM 執行個體全部都是計費資源。

讀取 App Engine 記錄

Rails 應用程式現已部署完畢,接下來您可能會想讀取記錄。您可以使用 Google Cloud 控制台中的記錄檔探索工具gcloud app logs read 讀取應用程式記錄。進一步瞭解如何使用 gcloud CLI 讀取記錄

清除所用資源

完成教學課程後,您可以清除所建立的資源,這樣資源就不會繼續使用配額,也不會產生費用。下列各節將說明如何刪除或關閉這些資源。

刪除專案

如要避免付費,最簡單的方法就是刪除您為了本教學課程所建立的專案。

刪除專案的方法如下:

  1. 前往 Google Cloud 控制台的「Manage resources」(管理資源) 頁面。

    前往「Manage resources」(管理資源)

  2. 在專案清單中選取要刪除的專案,然後點選「Delete」(刪除)
  3. 在對話方塊中輸入專案 ID,然後按一下 [Shut down] (關閉) 以刪除專案。

刪除 App Engine 版本

若要刪除應用程式版本:

  1. 前往 Google Cloud 控制台的 App Engine「Versions」(版本) 頁面。

    前往「版本」

  2. 勾選您要刪除的非預設應用程式版本的核取方塊。
  3. 如要刪除應用程式版本,請按一下 「刪除」

後續步驟