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.
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:
- Git installeren
- Ruby 2.6 installeren
- Ruby on Rails 5.1 installeren
- PostgreSQL installeren en uitvoeren
Gebruik de bash-omgeving in Azure Cloud shell.
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
psqluit om verbinding te maken met de lokale Postgres-server.sudo -u postgres psqlAls 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
\qom 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
cdnaar een werkmap uit.Kloon de voorbeeldopslagplaats en wijzig deze in de hoofdmap van de opslagplaats.
git clone https://github.com/Azure-Samples/rubyrails-tasks.git cd rubyrails-tasksZorg ervoor dat de standaard branch
mainis.git branch -m mainTip
De naamswijziging van de vertakking is niet vereist door App Service. Omdat veel opslagplaatsen hun standaardvertakking echter wijzigen in , laat deze zelfstudie u ook zien hoe u een opslagplaats
mainimplementeert vanuitmain. Zie Change deployment branch (Implementatiebranche wijzigen) voor meer informatie.Installeer de vereiste pakketten.
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:migrateVoer de toepassing uit.
rails serverGa naar
http://localhost:3000in een browser. Voeg een paar taken op de pagina toe.
Typ
Ctrl + Cin 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
Installeer de
db-upextensie met de volgende opdracht:az extension add --name db-upMaak 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 EnabledDeze 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-groupis 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 enpsql, maar metaz postgres upworden 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 gebruikersnaamrooten het wachtwoordSampledb1. 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 opdrachtaz account list-locations. Voor productie-apps plaatst u uw database en uw app in dezelfde locatie.- Er wordt een resourcegroep gemaakt met de naam
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=Sampledb1Voer 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=productionWanneer dit wordt uitgevoerd in de productieomgeving, heeft de Rails-toepassing vooraf gecompileerde assets nodig. Genereer de vereiste assets met de volgende opdracht:
rake assets:precompileDe Rails-productieomgeving gebruikt ook geheimen om de beveiliging beheren. Genereer een geheime sleutel.
rails secretSla 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=trueVoer de voorbeeldtoepassing uit in de productieomgeving.
rails server -e productionNavigeer 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.

Typ
Ctrl + Cin 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.
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 een nieuwe lege 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 secretIn 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
Omdat u de vertakking implementeert, moet u de standaardimplementatievertakking voor uw
mainApp Service-app instellenmainop (zie Implementatievertakking wijzigen). Stel in Cloud ShellDEPLOYMENT_BRANCHapp-instelling in met de opdrachtaz webapp config appsettings set.az webapp config appsettings set --name <app-name> --resource-group myResourceGroup --settings DEPLOYMENT_BRANCH='main'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 mainTijdens 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.
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
Donetoevoegt aan de tabelTasks:rails generate migration AddDoneToTasks Done:booleanMet 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
Doneinbegrepen 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 serverOm de status van de taak te zien wijzigen, gaat u naar
http://localhost:3000om items toe te voegen of te bewerken.
Typ
Ctrl + Cin 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=productionVoer uw wijzigingen door in Git en push de codewijzigingen vervolgens naar Azure.
git add . git commit -m "added complete checkbox" git push azure mainZodra
git pushis voltooid, gaat u naar de Azure-app en probeert u de nieuwe functionaliteit uit.
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.

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.

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:
