[RAILS] DB-Fehler bei der Bereitstellung mit Heroku

In diesem Artikel werde ich auf leicht verständliche Weise erklären, wie ich den Fehler beheben konnte, der bei der Bereitstellung mit Heroku aufgetreten ist.

Einführung

-Die bereitgestellte Anwendung wird mit dem Lehrplan TECH_CAMP erstellt.

・ Da das Poster ein Anfänger ist, kann es sein, dass er / sie falsche Informationen veröffentlicht. Zu dieser Zeit würde ich es begrüßen, wenn Sie darauf hinweisen könnten, ohne etwas zu unterlassen.

Bereitstellungsschritte

  1. Installieren Sie Heroku CLI → Um vom Terminal aus auf Heroku zuzugreifen. Führen Sie den folgenden Befehl im Terminal aus.
brew tap heroku/brew && brew install heroku
  1. Melden Sie sich bei Heroku an. Sie können sich mit dem folgenden Befehl anmelden.
heroku login --interactive

~~ 3. Installiere rails_12factor Gem. ~~ ~~ → Gem erforderlich, um die Rails-Anwendung auf Heroku auszuführen. ~~

Rails_12-Faktor-Edelstein wird in Rails 5 und höher nicht mehr benötigt. </ b>

Weitere Informationen finden Sie im Qiita-Artikel hier.

  1. Erstellen Sie eine Anwendung auf Heroku.
Heroku erstellen Anwendungsnamen
  1. Stellen Sie MySQL auf Heroku zur Verfügung. → Herokus Standard-DB ist PostgreSQL. Da diese Rails-Anwendung eine Datenbank mit MySQL erstellt hat, muss sie für die Anwendung festgelegt werden.
heroku addons:add cleardb
  1. Sie können jetzt MySQL unter Heroku verwenden, müssen jedoch auch die Einstellungen für Gem ändern.
heroku_cleardb=`heroku config:get CLEARDB_DATABASE_URL`

Sie haben jetzt die ClearDB-Datenbank-URL einer Variablen namens heroku_cleardb zugewiesen.

heroku config:set DATABASE_URL=mysql2${heroku_creardb:5}

DATABASE_URL wurde von config: set zurückgesetzt.

  1. Legen Sie den Wert von master.key mithilfe der Umgebungsvariablen fest. → Aus Sicherheitsgründen wird master.key nicht von Git verwaltet, daher kann es nicht so wie es ist auf Heroku bereitgestellt werden. Durch Festlegen des Werts von taster.key als Umgebungsvariable kann dieser auf Heroku verwendet werden.
heroku config:set RAILS_MASTER_KEY=`cat config/master.key`
  1. Drücken Sie die Anwendung.
git push heroku master
  1. Führen Sie die Migration auf Heroku durch. → Mit dem Befehl heroku run können Sie auch den Befehl Rails auf Heroku verwenden.
heroku run rails db:migrate
  1. Bestätigen Sie die Veröffentlichung.
heroku apps:info

Wurde ausgeführt, um zur angezeigten URL zu wechseln.

Fehler und Hypothese, die aufgetreten sind

error massage

Beim Übergang zur URL wurde der obige Fehlerbildschirm angezeigt.

Daher kehrte ich zum Terminal zurück und überprüfte das Fehlerprotokoll.

heroku logs --tail

Das Fehlerprotokoll wurde mit dem obigen Befehl angezeigt. Das erste was mir auffiel war

2020-11-11T22:07:09.588453+00:00 (weggelassen) Dyno=web.1 connect=14ms service=35ms status=500 bytes=1827 protocol=https

Da status = 500 ist, ist ersichtlich, dass dies ein serverseitiges Problem ist.

Wenn Sie genauer hinschauen,

 Mysql2::Error::ConnectionError (Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)):

Wird MySQL auf Heroku nicht erkannt? Ich dachte </ b>.

Gelöst basierend auf Hypothese

Wenn ich auf den Terminalcode zurückblicke, fand ich auch etwas Seltsames an den MySQL-Einstellungen.

nayuta@MacBookPro-Nayuta ajax_app % heroku_cleardb='heroku config:get CLEARDB_DATABASE_URL'
nayuta@MacBookPro-Nayuta ajax_app % heroku config:set DATABASE_URL=mysql2${heroku_creardb:5}
Setting DATABASE_URL and restarting ⬢ ajax-app-30306... done, v5
DATABASE_URL: mysql2

DATABASE_URL wird nicht korrekt gespeichert.

Mein Ergebnis


DATABASE_URL: mysql2

Richtiges Ergebnis


DATABASE_URL: mysql2://000000000000:[email protected]/heroku_aaa00000000?reconnect=true

Ich dachte, dass es hier keinen Fehler gab, aber wenn ich auf die in Schritt 6 geleistete Arbeit zurückblicke, gab es keine Rechtschreibfehler des Befehls, und es schien, dass er korrekt eingegeben wurde.

Deine Eingabe


heroku_cleardb='heroku config:get CLEARDB_DATABASE_URL'

Richtige Eingabe


heroku_cleardb=`heroku config:get CLEARDB_DATABASE_URL`

Ich starrte den Code an, sah ihn nach und fand es schließlich heraus.

Wo es in "(rückseitiges Zitat) hätte eingeschlossen werden sollen, wurde es in" (Einzelbeschichtung) eingeschlossen.

Es war ein sehr einfacher Fehler, aber ich war von den Rechtschreibfehlern abgelenkt und bemerkte es zu spät.

nayuta@MacBookPro-Nayuta ajax_app % heroku_cleardb=`heroku config:get CLEARDB_DATABASE_URL`
nayuta@MacBookPro-Nayuta ajax_app % heroku config:set DATABASE_URL=mysql2${heroku_cleardb:5}
Setting DATABASE_URL and restarting ⬢ ajax-app-30306... done, v12
DATABASE_URL: mysql2://bf691ece578431:[email protected]/heroku_b4193d2f6e19e50?reconnect=true

Wenn Sie es ordnungsgemäß in `` einschließen, ist das Zurücksetzen der URL abgeschlossen.

Selbst wenn Sie es so drücken, wie es ist, wird die folgende Fehlermeldung angezeigt

Everything up-to-date

Ich machte ein leeres Commit und ließ es zusammenschieben.

 git commit --allow-empty -m "Leeres Commit"
 git push heroku master 

Es scheint, dass es normal gepusht wurde. Als ich zur URL überging, wurde die erstellte Anwendung bereitgestellt.

Zusammenfassung

Ich war vorsichtig mit Rechtschreibfehlern, da es häufig zu Fehlern aufgrund von Tippfehlern kommt, aber ich hätte nie gedacht, dass ich Tippfehler in '' und '' machen würde. Es war ein sehr schrecklicher Fehler, aber ich hatte das Glück, dass der Erfahrungswert von "Ich habe aufgrund eines solchen Fehlers einen Fehler gemacht!" Erhöht wurde.

Recommended Posts