Ruby 开发堆栈目前仅支持 Ruby on Rails。 如果想要使用不同的平台(如 Sinatra),或者想要使用不受支持的 Ruby 版本,则需要 在自定义容器中运行它

如果没有 Azure 订阅 ,请在开始之前创建一个 Azure 免费帐户

Azure CLI

如果使用 Cloud Shell,则无需安装这些工具。

Azure Cloud Shell

Azure 托管 Azure Cloud Shell(一个可通过浏览器使用的交互式 shell 环境)。 可以将 Bash 或 PowerShell 与 Cloud Shell 配合使用来使用 Azure 服务。 可以使用 Cloud Shell 预安装的命令来运行本文中的代码,而不必在本地环境中安装任何内容。

若要启动 Azure Cloud Shell,请执行以下操作:

示例/链接
  • 选择代码块(或命令块)上的“复制”按钮以复制代码或命令。

  • 在 Windows 和 Linux 上选择 Ctrl+Shift+V,或在 macOS 上选择 Cmd+Shift+V 将代码或命令粘贴到 Cloud Shell 会话中。

  • 选择“Enter”运行代码或命令。

    本快速入门教程介绍了如何使用 Cloud Shell 将 Ruby on Rails 应用部署到 Linux 上的应用服务。

  • 在终端窗口中,将示例应用程序克隆到本地计算机,并导航到包含示例代码的目录。

    git clone https://github.com/Azure-Samples/ruby-docs-hello-world
    cd ruby-docs-hello-world
    
  • 确保默认分支为 main

    git branch -m main
    

    应用服务不需要更改分支名称。 但是,由于许多存储库将其默认分支更改为 main,因此本教程还介绍如何从 main 部署存储库。 有关详细信息,请参阅更改部署分支

    在本地运行应用程序

    如果你想要在本地运行应用程序以查看其工作方式,请在本地克隆存储库并执行以下步骤。

    由于与 Ruby 的版本冲突,这些步骤无法在 Azure Cloud Shell 中运行。

  • 安装所需的 gem。 示例中包含了 Gemfile,因此只需运行以下命令:

    bundle install
    
  • 安装 gem 后,启动应用:

    bundle exec rails server
    
  • 使用 Web 浏览器导航到 http://localhost:3000 以在本地测试该应用。

    配置部署用户

    可以使用“deployment user”将 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 上的应用服务支持的所有位置,请运行 az appservice list-locations --sku B1 --linux-workers-enabled 命令。

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

    通常在附近的区域中创建资源组和资源。

    此命令完成后,JSON 输出会显示资源组属性。

    创建 Azure 应用服务计划

    在 Cloud Shell 中,使用 az appservice plan create 命令创建一个应用服务计划。

    以下示例在免费定价层中创建名为 myAppServicePlan 的应用服务计划:

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

    创建应用服务计划后,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
  • 应用服务计划中创建一个 Web 应用

    在 Cloud Shell 中可以使用 az webapp create 命令。 在以下示例中,将 <app-name> 替换为全局唯一的应用名称(有效字符是 a-z0-9-)。 运行时设置为 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,后续将会用到。

  • 由于要部署 main 分支,因此需要将应用服务应用的默认部署分支设置为 main(请参阅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'
    
  • 回到本地终端窗口,将 Azure 远程功能添加到本地 Git 存储库。 将 <deploymentLocalGitUrl-from-create-step> 替换为创建应用时使用的 deploymentLocalGitUrl 值。

    git remote add azure <deploymentLocalGitUrl-from-create-step>
    
  • 使用以下命令推送到 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
  • 部署完成后,请等待大约 10 秒,然后重启 Web 应用,再导航到 Web 应用并验证结果。

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

    应用重启时,可能会在浏览器中看到 HTTP 状态代码 Error 503 Server unavailable 或在默认页面中看到 Hey, Ruby developers!。 可能需要花费几分钟时间才能完全重启应用。

  • 在 Azure Cloud Shell 中启动文本编辑器,编辑文件 app/controllers/application_controller.rb。 编辑 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!"
    
  • 保存并关闭该文件。

  • 使用以下命令将更改提交到 Git:

    git add .
    git commit -m "Hello world"
    git push azure main
    
  • 编辑 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!"
    
  • 从“源代码管理”菜单中,选择“暂存更改”按钮以暂存更改。

  • 输入提交消息,如 Hello world。 然后选择“提交和推送”。

  • 完成部署后,返回到“浏览到应用”步骤期间打开的浏览器窗口,然后刷新页面。

  •