Een Ruby- en een Postgres-app maken in Azure App Service op Linux

Azure App Service biedt een uiterst schaalbare webhostingservice met self-patchfunctie. In deze zelfstudie ziet u hoe u een Ruby-app maakt en deze verbindt met een PostgreSQL-database. Wanneer u klaar bent, hebt u een Ruby on Rails-app die op App Service op Linux wordt uitgevoerd.

Schermopname van een voorbeeld van een Ruby on Rails-app met de naam Taken.

In deze zelfstudie leert u het volgende:

  • Een PostgreSQL-database maken in Azure
  • Een Ruby on Rails-app verbinden met PostgreSQL
  • De app implementeren in Azure
  • Het gegevensmodel bijwerken en de app opnieuw implementeren
  • Logboeken met diagnostische gegevens vanaf Azure streamen
  • De app in Azure Portal beheren

Als u geen Azure-abonnement hebt, maakt u een gratis account voordat u begint.

Vereisten

Vereisten voor het voltooien van deze zelfstudie:

  • Gebruik de bash-omgeving in Azure Cloud shell.

    Cloud Shell starten in een nieuw venster

  • Installeer de Azure CLI, indien gewenst, om CLI-referentieopdrachten uit te voeren.

    • Als u een lokale installatie gebruikt, meldt u zich aan bij Azure CLI met behulp van de opdracht AZ login. Volg de stappen die worden weergegeven in de terminal, om het verificatieproces te voltooien. Raadpleeg Aanmelden bij de Azure CLI voor aanvullende aanmeldingsopties.

    • Installeer de Azure CLI-extensie bij het eerste gebruik, wanneer u hierom wordt gevraagd. Raadpleeg Extensies gebruiken met Azure CLI voor meer informatie over extensies.

    • Voer az version uit om de geïnstalleerde versie en afhankelijke bibliotheken te vinden. Voer az upgrade uit om te upgraden naar de nieuwste versie.

Lokale Postgres voorbereiden

In deze stap maakt u een database op de lokale Postgres-server om te gebruiken voor deze zelfstudie.

Verbinding maken met de lokale Postgres-server

Open het terminalvenster en voer psql uit om verbinding te maken met de lokale Postgres-server.

sudo -u postgres psql

Als de verbinding is geslaagd, wordt de Postgres-database uitgevoerd. Zo niet, dan start u de lokale Postgres-database door de stappen uit te voeren in Downloads - PostgreSQL Core Distribution.

Typ \q om de Postgres-client af te sluiten.

Maak een Postgres-gebruiker die databases kan maken door de volgende opdracht uit te voeren. Doe dit met behulp van de Linux-gebruikersnaam waarmee u bent aangemeld.

sudo -u postgres createuser -d <signed-in-user>

Maak een lokale Ruby on Rails-app

In deze stap krijgt u een Ruby on Rails-voorbeeld-app, configureert u de databaseverbinding en voert u deze lokaal uit.

Het voorbeeld klonen

Voer in het terminalvenster de opdracht cd naar een werkmap uit.

Voer de volgende opdracht uit om de voorbeeldopslagplaats te klonen.

git clone https://github.com/Azure-Samples/rubyrails-tasks.git

cd naar de gekloonde map. Installeer de vereiste pakketten.

cd rubyrails-tasks
bundle install --path vendor/bundle

Het voorbeeld lokaal uitvoeren

Voer de Rails-migraties uit om de tabellen te maken die de toepassing nodig heeft. Als u wilt zien welke tabellen worden gemaakt in de migraties, zoek dan in de map db/migreren in de Git-opslagplaats.

rake db:create
rake db:migrate

Voer de toepassing uit.

rails server

Ga naar http://localhost:3000 in een browser. Voeg een paar taken op de pagina toe.

Ruby on Rails is verbonden met Postgres

Typ Ctrl + C in de terminal om de Rails-server te stoppen.

Postgres maken in Azure

In deze stap maakt u een Postgres-database in Azure Database for Postgres. Later configureert u de Ruby on Rails-toepassing om verbinding te maken met deze database.

Een resourcegroep maken

Een resourcegroep is een logische container waarin Azure-resources, zoals web-apps, databases en opslagaccounts, worden geïmplementeerd en beheerd. U kunt bijvoorbeeld later de hele resourcegroep in één stap verwijderen.

Maak een resourcegroep in Cloud Shell met de opdracht az group create. In het volgende voorbeeld wordt een resourcegroep met de naam myResourceGroup gemaakt op de locatie Europa - west. Als u alle ondersteunde locaties voor App Service op Linux in prijscategorie Basic wilt zien, voert u de opdracht az appservice list-locations --sku B1 --linux-workers-enabled uit.

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

In het algemeen maakt u een resourcegroep en resources in een regio bij u in de buurt.

Wanneer de opdracht is voltooid, laat een JSON-uitvoer u de eigenschappen van de resource-groep zien.

Een Postgres-database maken in Azure

In deze sectie maakt u een Azure Database for PostgreSQL-server en -database. Installeer eerst de db-up-extensie met de volgende opdracht:

az extension add --name db-up

Maak de Postgres-database in Azure met de opdracht az postgres up, zoals in het volgende voorbeeld wordt weergegeven. Vervang <postgresql-name> door een unieke naam (het servereindpunt is https://<postgresql-name>.postgres.database.azure.com). Geef voor <admin-username> en <admin-password> referenties op om een gebruiker met beheerdersrechten te maken voor deze Postgres-server.

az postgres up --resource-group myResourceGroup --location westeurope --server-name <postgresql-name> --database-name sampledb --admin-user <admin-username> --admin-password <admin-password> --ssl-enforcement Enabled

Deze opdracht kan enige tijd in beslag nemen, omdat het volgende wordt uitgevoerd:

  • Er wordt een resourcegroep gemaakt met de naam myResourceGroup, als deze nog niet bestaat. Elke Azure-resource moet zich in een van deze groepen bevinden. --resource-group is optioneel.
  • Er wordt een Postgres-server gemaakt met de gebruiker met beheerdersrechten.
  • Hiermee maakt u een sampledb-database.
  • Er wordt toegang verleend vanaf uw lokale IP-adres.
  • Er wordt toegang verleend vanuit Azure-services.
  • Maak een databasegebruiker met toegang tot de sampledb-database.

U kunt alle stappen afzonderlijk uitvoeren met andere az postgres-opdrachten en psql, maar met az postgres up worden alle stappen in één keer voor u uitgevoerd.

Wanneer de opdracht is voltooid, zoekt u de uitvoerregels die beginnen met Ran Database Query:. Hier ziet u de databasegebruiker die voor u is gemaakt, met de gebruikersnaam root en het wachtwoord Sampledb1. Deze gaat u later gebruiken om uw app met de database te verbinden.

Tip

--location <location-name> kan worden ingesteld op een van de Azure-regio's. U kunt de regio's beschikbaar maken voor uw abonnement met de opdracht az account list-locations. Voor productie-apps plaatst u uw database en uw app in dezelfde locatie.

App verbinden met Azure Postgres

In deze stap verbindt u de Ruby on Rails-toepassing met de Postgres-database die u hebt gemaakt in Azure Database for PostgreSQL.

Verbinding met de database configureren

Open in de opslagplaats config/database.yml. Aan de onderkant van het bestand kunt u de productievariabelen vervangen door de volgende code.

production:
  <<: *default
  host: <%= ENV['DB_HOST'] %>
  database: <%= ENV['DB_DATABASE'] %>
  username: <%= ENV['DB_USERNAME'] %>
  password: <%= ENV['DB_PASSWORD'] %>

Sla de wijzigingen op.

De toepassing lokaal testen

Stel de volgende omgevingsvariabelen in wanneer u weer in de lokale terminal bent:

export DB_HOST=<postgres-server-name>.postgres.database.azure.com
export DB_DATABASE=sampledb 
export DB_USERNAME=root@<postgres-server-name>
export DB_PASSWORD=Sampledb1

Voer Rails-databasemigraties uit met de productiewaarden die u zojuist hebt geconfigureerd, om de tabellen te maken in de Postgres-database in Azure Database for PostgreSQL.

rake db:migrate RAILS_ENV=production

Wanneer dit wordt uitgevoerd in de productieomgeving, heeft de Rails-toepassing vooraf gecompileerde assets nodig. Genereer de vereiste assets met de volgende opdracht:

rake assets:precompile

De Rails-productieomgeving gebruikt ook geheimen om de beveiliging beheren. Genereer een geheime sleutel.

rails secret

Sla de geheime sleutel op naar de respectieve variabelen die worden gebruikt door de productieomgeving van Rails. Voor uw gemak gebruikt u dezelfde sleutel voor beide variabelen.

export RAILS_MASTER_KEY=<output-of-rails-secret>
export SECRET_KEY_BASE=<output-of-rails-secret>

Schakel de productieomgeving van Rails in om JavaScript- en CSS-bestanden te verzenden.

export RAILS_SERVE_STATIC_FILES=true

Voer de voorbeeldtoepassing uit in de productieomgeving.

rails server -e production

Navigeer naar http://localhost:3000. Als de pagina zonder fouten wordt geladen, maakt de Ruby on Rails-toepassing verbinding met de Postgres-database in Azure.

Voeg een paar taken op de pagina toe.

Ruby on Rails maakt verbinding met Azure Database for PostgreSQL

Typ Ctrl + C in de terminal om de Rails-server te stoppen.

Uw wijzigingen doorvoeren

Voer de volgende Git-opdrachten uit om uw wijzigingen door te voeren:

git add .
git commit -m "database.yml updates"

Uw app kan worden geïmplementeerd.

Implementeren in Azure

In deze stap implementeert u de met Postgres verbonden Rails-toepassing naar Azure App Service.

Een implementatiegebruiker configureren

FTP en lokale Git kunnen worden geïmplementeerd in een Azure-web-app met behulp van een implementatiegebruikers. Zodra u deze implementatiegebruiker hebt gemaakt, kunt u deze voor al uw Azure-implementaties gebruiken. Uw gebruikersnaam en wachtwoord voor implementatie op accountniveau verschillen van de referenties voor uw Azure-abonnement.

Als u de implementatiegebruiker wilt configureren, voert u de opdracht az webapp deployment user set uit in Azure Cloud Shell. Vervang <username> en <password> door de gebruikersnaam en het wachtwoord van de gebruiker van de implementatie.

  • De gebruikersnaam moet uniek zijn binnen Azure en voor lokale Git-pushes en mag het symbool '@' niet bevatten.
  • Het wachtwoord moet ten minste acht tekens lang zijn en minimaal twee van de volgende drie typen elementen bevatten: letters, cijfers en symbolen.
az webapp deployment user set --user-name <username> --password <password>

De JSON-uitvoer toont het wachtwoord als null. Als er een 'Conflict'. Details: 409-fout optreedt, wijzigt u de gebruikersnaam. Als er een 'Bad Request'. Details: 400-fout optreedt, kiest u een sterker wachtwoord.

Noteer uw gebruikersnaam en wachtwoord om te gebruiken bij het implementeren van uw web-apps.

Een App Service-plan maken

Maak in Cloud Shell een App Service-plan met de opdracht az appservice plan create.

In het volgende voorbeeld wordt een App Service-plan gemaakt met de naam myAppServicePlan en de prijscategorie Gratis:

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

Wanneer het App Service-plan is gemaakt, toont de Azure CLI soortgelijke informatie als in het volgende voorbeeld:

{ 
  "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
} 

Een webtoepassing maken

Een web-app maken in het App Service-plan myAppServicePlan.

In Cloud Shell kunt u de opdracht az webapp create gebruiken. Vervang in het volgende voorbeeld <app-name> door een unieke naam (geldige tekens zijn a-z, 0-9, en -). De runtime is ingesteld op RUBY|2.6.2. Voer az webapp list-runtimes --linux uit als u alle ondersteunde runtimes wilt zien.

# Bash
az webapp create --resource-group myResourceGroup --plan myAppServicePlan --name <app-name> --runtime "RUBY|2.6.2" --deployment-local-git
# PowerShell
az --% webapp create --resource-group myResourceGroup --plan myAppServicePlan --name <app-name> --runtime "RUBY|2.6.2" --deployment-local-git

Wanneer de web-app is gemaakt, toont de Azure CLI soortgelijke uitvoer als in het volgende voorbeeld:

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. >
}

U hebt ™ lege nieuwe web-app gemaakt, met Git-implementatie ingeschakeld.

Notitie

De URL van de externe Git wordt weergegeven in de eigenschap deploymentLocalGitUrl, met de indeling https://<username>@<app-name>.scm.azurewebsites.net/<app-name>.git. Sla deze URL op, want u hebt deze later nodig.

Database-instellingen configureren

In App Service stelt u omgevingsvariabelen in als app-instellingen met behulp van de opdracht az webapp config appsettings set in de Cloud Shell.

De volgende opdracht in de Cloud Shell configureert de app-instellingen DB_HOST, DB_DATABASE, DB_USERNAME, en DB_PASSWORD. Vervang de tijdelijke aanduidingen <appname> en <postgres-server-name> .

az webapp config appsettings set --name <app-name> --resource-group myResourceGroup --settings DB_HOST="<postgres-server-name>.postgres.database.azure.com" DB_DATABASE="sampledb" DB_USERNAME="root@<postgres-server-name>" DB_PASSWORD="Sampledb1"

Rails-omgevingsvariabelen configureren

Genereer een nieuwe geheime sleutel in de lokale terminal voor de productieomgeving van Rails in Azure.

rails secret

Configureer de variabelen die zijn vereist voor de productieomgeving van Rails.

In de volgende opdracht voor Cloud Shell vervangt u de twee tijdelijke aanduidingen <output-of-rails-secret> door de nieuwe geheime sleutel die u hebt gegenereerd in de lokale terminal.

az webapp config appsettings set --name <app-name> --resource-group myResourceGroup --settings RAILS_MASTER_KEY="<output-of-rails-secret>" SECRET_KEY_BASE="<output-of-rails-secret>" RAILS_SERVE_STATIC_FILES="true" ASSETS_PRECOMPILE="true"

ASSETS_PRECOMPILE="true" geeft de standaard Ruby-container opdracht tot het vooraf compileren van assets bij elke Git-implementatie. Zie Assets vooraf compileren en Statische assets presenteren voor meer informatie.

Pushen naar Azure vanaf Git

Voeg in het lokale terminalvenster een externe Azure-instantie toe aan uw lokale Git-opslagplaats.

git remote add azure <paste-copied-url-here>

Push naar de externe Azure-instantie om de Ruby on Rails-toepassing te implementeren. U wordt gevraagd naar het wachtwoord dat u eerder hebt opgegeven als onderdeel van het maken van de implementatiegebruiker.

git push azure main

Tijdens de implementatie communiceert Azure App Service de voortgang naar Git.

Counting objects: 3, done.
Delta compression using up to 8 threads.
Compressing objects: 100% (3/3), done.
Writing objects: 100% (3/3), 291 bytes | 0 bytes/s, done.
Total 3 (delta 2), reused 0 (delta 0)
remote: Updating branch 'main'.
remote: Updating submodules.
remote: Preparing deployment for commit id 'a5e076db9c'.
remote: Running custom deployment command...
remote: Running deployment command...
...
< Output has been truncated for readability >

Naar de Azure-app bladeren

Blader naar http://<app-name>.azurewebsites.net en voeg een paar taken toe aan de lijst.

Schermopname van het voorbeeld van de Azure-app met de naam Taken met taken die zijn toegevoegd aan de lijst.

Gefeliciteerd, u voert een gegevensgestuurde Ruby on Rails-app uit in Azure App Service.

Het model lokaal bijwerken en opnieuw implementeren

In deze stap maakt u een eenvoudige wijziging in het task-gegevensmodel en de web-app en publiceert u de update vervolgens naar Azure.

Voor het takenscenario wijzigt u de toepassing, zodat u een taak als voltooid kunt markeren.

Een kolom toevoegen

Ga in de terminal naar de hoofdmap van de Git-opslagplaats.

Genereer een nieuwe migratie die een Booleaanse kolom met de naam Done toevoegt aan de tabel Tasks:

rails generate migration AddDoneToTasks Done:boolean

Met deze opdracht genereert u een nieuw migratiebestand in de map db/migreren.

Voer in de terminal Rais-databasemigraties uit om de wijziging in de lokale database door te voeren.

rake db:migrate

Toepassingslogica bijwerken

Open het bestand app/controllers/tasks_controller.rb. Zoek de volgende regel aan het einde van het bestand:

params.require(:task).permit(:Description)

Wijzig deze regel zodanig dat de nieuwe parameter Done inbegrepen is.

params.require(:task).permit(:Description, :Done)

De weergaven bijwerken

Open het bestand app/views/tasks/_form.html.erb, dit is het formulier Bewerken.

Zoek de regel <%=f.error_span(:Description) %> en voeg de volgende code direct eronder in:

<%= f.label :Done, :class => 'control-label col-lg-2' %>
<div class="col-lg-10">
  <%= f.check_box :Done, :class => 'form-control' %>
</div>

Open het bestand app/views/tasks/show.html.erb, dit is de pagina met Weergaven van één enkel gegevensrecord.

Zoek de regel <dd><%= @task.Description %></dd> en voeg de volgende code direct eronder in:

  <dt><strong><%= model_class.human_attribute_name(:Done) %>:</strong></dt>
  <dd><%= check_box "task", "Done", {:checked => @task.Done, :disabled => true}%></dd>

Open het bestand app/views/tasks/index.html.erb, dit is de Index-pagina voor alle records.

Zoek de regel <th><%= model_class.human_attribute_name(:Description) %></th> en voeg de volgende code direct eronder in:

<th><%= model_class.human_attribute_name(:Done) %></th>

Zoek in hetzelfde bestand de regel <td><%= task.Description %></td> en voeg de volgende code direct eronder in:

<td><%= check_box "task", "Done", {:checked => task.Done, :disabled => true} %></td>

De wijzigingen lokaal testen

Voer in de lokale terminal de Rails-server uit.

rails server

Om de status van de taak te zien wijzigen, gaat u naar http://localhost:3000 om items toe te voegen of te bewerken.

Selectievakje toegevoegd aan de taak

Typ Ctrl + C in de terminal om de Rails-server te stoppen.

Wijzigingen publiceren in Azure

Voer in de terminal Rails-databasemigraties voor de productie-omgeving uit, om de wijziging in de Azure-database te maken.

rake db:migrate RAILS_ENV=production

Voer uw wijzigingen door in Git en push de codewijzigingen vervolgens naar Azure.

git add .
git commit -m "added complete checkbox"
git push azure main

Zodra git push is voltooid, gaat u naar de Azure-app en probeert u de nieuwe functionaliteit uit.

In Azure gepubliceerde model- en databasewijzigingen

Als u taken hebt toegevoegd, worden deze in de database bewaard. Updates van het gegevensschema laten bestaande gegevens intact.

Diagnostische logboeken streamen

Als u toegang wilt tot de consolelogboeken die worden gegenereerd binnen uw toepassingscode in de App Service, schakelt u diagnostische logboekregistratie in door de volgende opdracht in de Cloud Shell uit te voeren:

az webapp log config --resource-group <resource-group-name> --name <app-name> --docker-container-logging filesystem --level Verbose

Mogelijk waarden voor --level zijn: Error, Warning, Info en Verbose. Elk hoger niveau omvat het vorige niveau. Bijvoorbeeld: Error omvat alleen foutberichten en Verbose omvat alle berichten.

Nadat diagnostische logboekregistratie is ingeschakeld, voert u de volgende opdracht uit om de logboekstream te zien:

az webapp log tail --resource-group <resource-group-name> --name <app-name>

Als u de consolelogboeken niet meteen ziet, probeert u het opnieuw na 30 seconden.

Notitie

U kunt ook de logboekbestanden van de browser inspecteren op https://<app-name>.scm.azurewebsites.net/api/logs/docker.

U kunt op elk gewenst moment Ctrl+C typen om te stoppen met logboekstreaming.

De Azure-app beheren

Ga naar Azure Portal om de app te beheren die u hebt gemaakt.

Klik in het linkermenu op App Services en klik op de naam van uw Azure-app.

Navigatie naar Azure-app in de portal

De pagina Overzicht van uw app wordt weergegeven. Hier kunt u algemene beheertaken uitvoeren, zoals stoppen, starten, opnieuw starten, bladeren en verwijderen.

Het linkermenu bevat een aantal pagina's voor het configureren van uw app.

App Service-pagina in Azure Portal

Resources opschonen

In de voorgaande stappen hebt u Azure-resources in een resourcegroep gemaakt. Als u deze resources niet meer nodig denkt te hebben, verwijdert u de resourcegroep door de volgende opdracht in Cloud Shell uit te voeren:

az group delete --name myResourceGroup

Het kan een minuut duren voordat deze opdracht is uitgevoerd.

Volgende stappen

In deze zelfstudie heeft u het volgende geleerd:

  • Een Postgres-database maken in Azure
  • Een Ruby on Rails-app verbinden met Postgres
  • De app implementeren in Azure
  • Het gegevensmodel bijwerken en de app opnieuw implementeren
  • Logboeken met diagnostische gegevens vanaf Azure streamen
  • De app in Azure Portal beheren

Ga door naar de volgende zelfstudie om te leren hoe u een aangepaste DNS-naam aan uw app kunt toewijzen.

U kunt ook andere resources bekijken: