在 App Service 中建立 Ruby on Rails 應用程式

Linux 上的 Azure App Service 使用 Linux 作業系統提供可高度擴充、自我修復的 Web 主機服務。

注意

Ruby 開發堆疊目前僅支援 Ruby on Rails。 如果您想要使用不同的平台 (例如 Sinatra),或是要使用不支援的 Ruby 版本,則必須在自訂容器中加以執行

螢幕擷取畫面:Azure 中執行的範例應用程式,顯示「Hello from Azure App Service on Linux!」。

如果您沒有 Azure 訂閱,請在開始之前,先建立 Azure 免費帳戶

如果您要在本機執行範例程式碼,您將需要:

如果您使用 Cloud Shell,則不需要安裝這些項目。

Azure Cloud Shell

Azure Cloud Shell 是裝載於 Azure 中的互動式殼層環境,可在瀏覽器中使用。 您可以使用 Bash 或 PowerShell 搭配 Cloud Shell,與 Azure 服務共同使用。 您可以使用 Cloud Shell 預先安裝的命令,執行本文提到的程式碼,而不必在本機環境上安裝任何工具。

要啟動 Azure Cloud Shell:

選項 範例/連結
選取程式碼或命令區塊右上角的 [試試看]。 選取 [試試看] 並不會自動將程式碼或命令複製到 Cloud Shell 中。 Azure Cloud Shell 的「試試看」範例螢幕擷取畫面。
請前往 https://shell.azure.com,或選取 [啟動 Cloud Shell] 按鈕,在瀏覽器中開啟 Cloud Shell。 顯示如何在新視窗中啟動 Cloud Shell 的螢幕擷取畫面。
選取 Azure 入口網站右上方功能表列上的 [Cloud Shell] 按鈕。 顯示 Azure 入口網站中 Cloud Shell 按鈕的螢幕擷取畫面

若要使用 Azure Cloud Shell:

  1. 啟動 Cloud Shell。

  2. 選取程式碼區塊 (或命令區塊) 上的 [複製] 按鈕以複製程式碼或命令。

  3. 透過在 Windows 和 Linux 上選取 Ctrl+Shift+V;或在 macOS 上選取 Cmd+Shift+V,將程式碼或命令貼到 Cloud Shell 工作階段中。

  4. 選取 Enter 鍵執行程式碼或命令。

1 - 取得範例存放庫

本快速入門教學課程會說明如何使用 Cloud Shell 將 Ruby on Rails 應用程式部署至 Linux 上的 App Service。

  1. 在終端機視窗中,將範例應用程式複製到本機電腦,然後瀏覽至包含範例程式碼的目錄。

    git clone https://github.com/Azure-Samples/ruby-docs-hello-world
    cd ruby-docs-hello-world
    
  2. 確定預設分支為 main

    git branch -m main
    

    提示

    App Service 不需變更分支名稱。 不過,由於許多存放庫都會將其預設分支變更為 main,因此,此教學課程也會示範如何從 main 部署存放庫。 如需詳細資訊,請參閱變更部署分支

在本機執行應用程式

如果您想要在本機執行應用程式以查看其運作方式,請在本機複製存放庫並遵循下列步驟。

注意

這些步驟無法在 Azure Cloud Shell 中執行,因為該版本會與 Ruby 發生衝突。

  1. 安裝必要的 Gem。 範例中包含 Gemfile,因此請直接執行下列命令:

    bundle install
    
  2. 安裝 Gem 之後,起始應用程式:

    bundle exec rails server
    
  3. 使用網頁瀏覽器,瀏覽至 http://localhost:3000,在本機測試應用程式。

    已設定 Hello World

2 - 將應用程式程式碼部署至 Azure

設定部署使用者

FTP 和本機 Git 可以透過使用「部署使用者」部署到 Azure Web 應用程式。 部署使用者只需設定一次,就能供所有 Azure 部署使用。 使用者名稱和密碼屬於帳戶等級部署,因此與 Azure 訂用帳戶認證不同。

若要設定部署使用者,請在 Azure Cloud Shell 中執行 az webapp deployment user set 命令。 將 <username> 和 <password> 取代為部署使用者的使用者名稱和密碼。

  • 使用者名稱在 Azure 服務及本機 Git 推送中都必須是唯一的,且不能包含 ‘@’ 符號。
  • 密碼長度必須至少為 8 個字元,包含下列三個元素其中兩個:字母、數字及符號。
az webapp deployment user set --user-name <username> --password <password>

JSON 輸出會將密碼顯示為 null。 如果您收到 'Conflict'. Details: 409 錯誤,請變更使用者名稱。 如果您收到 'Bad Request'. Details: 400 錯誤,請使用更強的密碼。

將使用者名稱和密碼記錄下來,在部署 Web 應用程式時還會用到。

建立資源群組

資源群組是一個邏輯容器,可在其中部署與管理 Azure 資源 (例如 Web 應用程式、資料庫和儲存體帳戶)。 例如,您可以選擇在稍候透過一個簡單的步驟刪除整個資源群組。

在 Cloud Shell 中,使用 az group create 命令來建立資源群組。 下列範例會在「西歐」位置建立名為 myResourceGroup 的資源群組。 若要查看基本層中 Linux 上之 App Service 的所有支援位置,請執行 az appservice list-locations --sku B1 --linux-workers-enabled 命令。

az group create --name myResourceGroup --location "West Europe"

您通常會在附近的區域中建立資源群組和資源。

當命令完成時,JSON 輸出會顯示資源群組屬性。

建立 Azure App Service 方案

在 Cloud Shell 中,使用 az appservice plan create 命令來建立 App Service 方案。

下列範例會在免費定價層中建立名為 myAppServicePlan 的 App Service 方案。

az appservice plan create --name myAppServicePlan --resource-group myResourceGroup --sku FREE --is-linux

建立 App Service 方案後,Azure CLI 會顯示類似下列範例的資訊:

{ 
  "freeOfferExpirationTime": null,
  "geoRegion": "West Europe",
  "hostingEnvironmentProfile": null,
  "id": "/subscriptions/0000-0000/resourceGroups/myResourceGroup/providers/Microsoft.Web/serverfarms/myAppServicePlan",
  "kind": "linux",
  "location": "West Europe",
  "maximumNumberOfWorkers": 1,
  "name": "myAppServicePlan",
  < JSON data removed for brevity. >
  "targetWorkerSizeId": 0,
  "type": "Microsoft.Web/serverfarms",
  "workerTierName": null
} 
  1. myAppServicePlan App Service 方案中建立 Web 應用程式

    在 Cloud Shell 中,您可以使用 az webapp create 命令。 在下列範,了中,使用全域唯一的應用程式名稱 (有效的字元為 a-z0-9-) 取代 <app-name>。 執行階段設定為 RUBY|2.7。 若要查看所有支援的執行階段,請執行 az webapp list-runtimes --os linux

    az webapp create --resource-group myResourceGroup --plan myAppServicePlan --name <app-name> --runtime 'RUBY|2.7' --deployment-local-git
    

    建立 Web 應用程式後,Azure CLI 會顯示類似下列範例的輸出:

     Local git is configured with url of 'https://<username>@<app-name>.scm.azurewebsites.net/<app-name>.git'
     {
       "availabilityState": "Normal",
       "clientAffinityEnabled": true,
       "clientCertEnabled": false,
       "cloningInfo": null,
       "containerSize": 0,
       "dailyMemoryTimeQuota": 0,
       "defaultHostName": "<app-name>.azurewebsites.net",
       "deploymentLocalGitUrl": "https://<username>@<app-name>.scm.azurewebsites.net/<app-name>.git",
       "enabled": true,
       < JSON data removed for brevity. >
     }
     

    您已建立空的新 Web 應用程式,其中已啟用 Git 部署。

    注意

    Git 遠端的 URL 會顯示在 deploymentLocalGitUrl 屬性中,其格式為 https://<username>@<app-name>.scm.azurewebsites.net/<app-name>.git。 儲存此 URL,稍後您會用到此資訊。

  2. 由於您要部署 main 分支,因此必須將 App Service 應用程式的預設部署分支設定為 main (請參閱變更部署分支)。 在 Cloud Shell 中,使用 az webapp config appsettings set 命令來設定 DEPLOYMENT_BRANCH 應用程式設定。

    az webapp config appsettings set --name <app-name> --resource-group myResourceGroup --settings DEPLOYMENT_BRANCH='main'
    
  3. 回到本機終端視窗,將 Azure 遠端新增至本機 Git 存放庫。 以應用程式建立的 deploymentLocalGitUrl 值取代 < deploymentLocalGitUrl-from-create-step >

    git remote add azure <deploymentLocalGitUrl-from-create-step>
    
  4. 推送到 Azure 遠端,使用下列命令來部署您的應用程式。 當 Git 認證管理員提示輸入認證時,請務必輸入您在設定部署使用者中建立的認證,而不是您用來登入 Azure 入口網站的認證。

    git push azure main
    

    此命令可能會花數分鐘執行。 執行上述命令時,會顯示類似下列範例的資訊:

    remote: Using turbolinks 5.2.0
    remote: Using uglifier 4.1.20
    remote: Using web-console 3.7.0
    remote: Bundle complete! 18 Gemfile dependencies, 78 gems now installed.
    remote: Bundled gems are installed into `/tmp/bundle`
    remote: Zipping up bundle contents
    remote: .......
    remote: ~/site/repository
    remote: Finished successfully.
    remote: Running post deployment command(s)...
    remote: Deployment successful.
    remote: App container will begin restart within 10 seconds.
    To https://<app-name>.scm.azurewebsites.net/<app-name>.git
       a6e73a2..ae34be9  main -> main
    
  5. 部署完成之後,請等候 10 秒來讓 Web 應用程式重新啟動,然後瀏覽至 Web 應用程式並確認結果。

http://<app-name>.azurewebsites.net

注意

當應用程式重新啟動時,您可以在瀏覽器或 Hey, Ruby developers! 預設頁面中觀察 HTTP 狀態碼 Error 503 Server unavailable。 應用程式可能需要幾分鐘才能完全重新啟動。

Ruby 範例程式碼正在 Azure App Service Linux Web 應用程式中執行。

螢幕擷取畫面:Azure 中執行的範例應用程式,顯示「Hello from Azure App Service on Linux!」。

恭喜! 您已使用 Azure 入口網站部署第一個 Ruby 應用程式至 App Service。

3 - 更新和重新部署應用程式

  1. 從 Azure Cloud Shell,啟動文字編輯器,例如 nanovim ,以在 app/controllers/application_controller.rb 中編輯檔案。

    nano app/controllers/application_controller.rb
    
  2. 編輯 ApplicationController 類別,使其顯示 「Hello world from Azure App Service on Linux!」 而不是 「Hello from Azure App Service on Linux!」。

    class ApplicationController < ActionController::Base
        def hello
            render html: "Hello world from Azure App Service on Linux!"
        end
    end
    
  3. 儲存並關閉檔案。

  4. 使用下列命令確認 Git 變更:

    git add .
    git commit -m "Hello world"
    git push azure main
    

注意

  • 請確定您的 git push 陳述式包含 azure main,以便直接推送至 Azure Git 部署 URL。
  • 當您確認變更時,您可能也需要設定 user.nameuser.email Git 設定值。 您可以使用 git config user.name "YOUR NAME"git config user.email "YOUR EMAIL" 執行該作業。

4. 管理新的 Azure 應用程式

  1. 請移至 Azure 入口網站,以管理您所建立的 Web 應用程式。 搜尋並選取 [應用程式服務] 。

    螢幕擷取畫面:Azure 入口網站與搜尋文字輸入框輸入「app services」。搜尋結果則在 [服務] 下方已醒目提示 [App Service] 選項。

  2. 選取您 Azure 應用程式的名稱。

    螢幕擷取畫面:Azure 中的 App Service。已醒目提示示範應用程式服務的名稱。

您 Web 應用程式的 [概觀] 頁面會隨即顯示。 您可以在這裡執行基本管理工作,像是 [瀏覽] 、[停止] 、[重新啟動] 和 [刪除] 。

螢幕擷取畫面:Azure 入口網站 中 App Service 概觀頁面,已醒目提示 [瀏覽器]、[停止]、[交換] (停用)、[重新啟動]、[刪除] 按鈕群組。

5 - 清理資源

清除部署

在執行過範例指令碼之後,您可以使用下列命令來移除資源群組和所有與其相關聯的資源。

az group delete --name myResourceGroup

後續步驟