[PYTHON] LINEbot-Entwicklung möchte ich den Betrieb in der lokalen Umgebung überprüfen

Dieser Artikel ** Irgendwie jedes Mal, wenn ich die Operation überprüfe, auf Heroku drücken! !! ** Für diejenigen, die denken.

Betriebsumgebung

Bedeutung der Verwendung von Heroku

Überlegen Sie sich vor der Lösung des Problems, warum Sie Heroku überhaupt verwendet haben. LINEbot und Heroku waren über ein Zugriffstoken, einen geheimen Schlüssel und eine ** Webhook-URL ** verbunden. "Zahl" Sobald die Heroku-App veröffentlicht (bereitgestellt) ist, kann sie eine URL haben (~ herokuapp.com). Dies ist die, die ich als ** Webhook-URL ** verwende. Ich wünschte, ich könnte diese Webhook-URL selbst vorbereiten, aber ich kann es nicht einfach. Ich hatte also keine andere Wahl, als Heroku bereitzustellen und zu verwenden, um die URL der App zu erhalten (aber nicht nur).

Was ist dann zu tun

** Veröffentlichen Sie Ihren lokalen Host ** nach außen ** ohne Heroku zu verwenden. Auf diese Weise können Sie eine Webhook-URL vorbereiten. (Ich frage mich, ob es sicher ist, localhost zu veröffentlichen, aber ich werde es verlassen.) Das Tool, das ich benutze, ist ** ngrok **.

Wie macht man

Laden Sie die Zip-Datei mit dem roten Knopf auf der [offiziellen Website von ngrok] herunter (https://dashboard.ngrok.com/get-started). Screenshot from 2020-02-19 03-45-22.png

Verwenden Sie als Nächstes den folgenden Befehl, um die Version zu dekomprimieren und zu überprüfen.

ngrok Installation


cd ~/Downloads
unzip ngrok-stable-linux-amd64.zip
sudo cp ngrok /usr/bin/
ngrok version

Sie können jetzt ngrok verwenden. Bei der tatsächlichen Verwendung

Extern auf ngrok veröffentlicht


ngrok http [Port-Nummer]

Die [Portnummer] des lokalen Servers ist nach außen offengelegt.

ngrok Ausführungsergebnis


ngrok by @inconshreveable    (Ctrl+C to quit)
Session Status                online
Session Expires               7 hours, 59 minutes
Version                       2.3.35
Region                        United States (us)
Web Interface                 http://127.0.0.1:☓☓☓☓
Forwarding                    http://☓☓☓☓☓☓☓☓.ngrok.io -> http://localhost:5000 
Forwarding                    https://☓☓☓☓☓☓☓☓.ngrok.io -> http://localhost:5000
Connections
ttl     opn     rt1     rt5     p50     p90
0       0       0.00    0.00    0.00    0.00  

Die URL bei https: // ☓☓☓☓☓☓☓☓.ngrok.io neben Weiterleitung macht localhost nach außen offen (Portnummer ist 5000). Verwenden Sie dies als ** Webhook-URL! ** ** **

.env ist eine Datei, die Umgebungsvariablen festlegt. Senden Sie sie daher nicht an GitHub. Informieren Sie sich über die Verwendung der .gitignore-Datei, um ein Pushing zu vermeiden.

.env


LINE_CHANNEL_ACCESS_TOKEN = ☓☓☓☓☓☓☓☓☓☓☓☓☓☓☓☓☓☓☓☓☓☓☓☓
LINE_CHANNEL_SECRET = ☓☓☓☓☓☓☓☓☓☓☓☓☓☓☓☓☓☓☓☓☓☓☓☓

・ ** Führen Sie main.py aus ** Bereiten Sie zwei Terminals vor und führen Sie ngrok erneut auf einem aus. (Da ngrok bei jeder Ausführung eine andere URL zuordnet, sollte sich der Wert früher geändert haben.) Wenn dies ausgeführt wird, hacken die LINE-Entwickler die URL

https://☓☓☓☓☓☓☓☓.ngrok.io/callback

Auf (https!) Setzen. Führen Sie schließlich main.py wie folgt in einem anderen Terminal aus.

main.Führen Sie py aus


pipenv shell //In einer virtuellen Umgebung
pipenv run python3.8 main.py

Hoffentlich funktioniert das Beispiel.

** Im Fehlerfall ** Error: the command python3.8 could not be found within PATH or Pipfile's [scripts]. Wenn Sie einen Fehler wie oben erhalten Ändern Sie python3.8 in eine, die Ihrer Umgebung entspricht.

main.Führen Sie py aus


pipenv run python main.py

Zum Beispiel "Python" oder "Python3".

Zusammenfassung

Ich konnte die Operation vor Ort bestätigen, ohne jedes Mal auf Heroku zu drücken. Edit main.py ⇒ Ausführen ⇒ Einfach bearbeiten, damit die Entwicklung reibungslos verläuft.

** ngrok ändert die URL jedoch jedes Mal, wenn sie ausgeführt wird **, sodass Sie die Webhook-URL der LINE-Entwickler jedes Mal ändern müssen, wenn Sie ngrok stoppen. Ich bin auch der Meinung, dass es schlecht für die Sicherheit ist, localhost nach außen zu bringen ** (ich kenne die Details nicht).

das ist alles!

Referenzartikel

Es scheint, dass ngrok sicher oder gefährlich ist, kostenlos oder bezahlt und so weiter. Überprüfen Sie die Aktionen rund um den Webhook auf dem lokalen Host ngrok ist zu bequem Verwenden Sie ngrok so sicher wie möglich (Standardauthentifizierung)

Recommended Posts

LINEbot-Entwicklung möchte ich den Betrieb in der lokalen Umgebung überprüfen
Ich möchte den Fortschritt in Python anzeigen!
Ich möchte in Python schreiben! (1) Überprüfung des Codeformats
Ich möchte Python in der Umgebung von pyenv + pipenv unter Windows 10 verwenden
Ich möchte einfach eine modellbasierte Entwicklungsumgebung erstellen
Ich möchte in Python schreiben! (3) Verwenden Sie Mock
Ich möchte R-Datensatz mit Python verwenden
Ich möchte die Mühe der Eingabe beim Debuggen von Paizas Skill-Check-Beispiel in einer lokalen Umgebung wie Jupyter [Python] sparen.
Ich möchte Betriebsinformationen über die Yahoo-Route erhalten
Ich möchte den Wörterbuchtyp in der Liste eindeutig machen
Ich möchte die gültigen Zahlen im Numpy-Array ausrichten
Ich wollte den AWS-Schlüssel nicht in das Programm schreiben
Ich möchte Rails mit Rails auch in einer vagabundierenden Umgebung betreiben
Ich möchte die zweite Zeile zum Spaltennamen in Pandas machen
Ich möchte den G-Test in einem Monat Tag 1 bestehen
Ich möchte die Position meines Gesichts mit OpenCV überprüfen!
Ich möchte die Bevölkerung jedes Landes der Welt kennenlernen.
Ich möchte Spyder an die Taskleiste anheften
Ich möchte kühl auf die Konsole ausgeben
Ich möchte in der Einschlussnotation drucken
Ich möchte mit dem Reim Teil1 umgehen
Ich möchte mit dem Reim part3 umgehen
Ich möchte eine Python-Umgebung erstellen
Ich möchte den Fortschrittsbalken anzeigen
Ich möchte Matplotlib in PySimpleGUI einbetten
Ich möchte mit dem Reim part2 umgehen
Ich möchte mit dem Reim part5 umgehen
Ich möchte mit dem Reim part4 umgehen
Ich möchte die Farbe ändern, indem ich auf den Streupunkt in matplotlib klicke
So überprüfen Sie die lokale GAE über den iPhone-Browser im selben LAN
Ich möchte die Verarbeitung zwischen Testzeit und Produktionsumgebung trennen
[C-Sprache] Ich möchte Zufallszahlen im angegebenen Bereich generieren
Ich möchte das Ergebnis von "Zeichenfolge" .split () in Python stapelweise konvertieren
Ich möchte die abstrakte Klasse (ABCmeta) von Python im Detail erklären
Ich möchte eine Liste in der Reihenfolge anderer Listen sortieren
Ich möchte die Django Debug Toolbar in Ajax-Anwendungen verwenden
Mit Docker durchgeführte Umgebungswartung (Ich möchte GrADS in Python nachbearbeiten
Ich möchte einen beliebigen Befehl im Befehlsverlauf von Shell belassen
Ich habe ein Programm erstellt, um die Größe einer Datei mit Python zu überprüfen
Verwenden wir die NAOqi OS VM. Ich möchte Abhängigkeiten mit pip auch in der Pepper-Entwicklung auflösen
Ich möchte das Pytest-Gerät als Bibliothek an einer anderen Stelle laden (Pytest ist möglicherweise nicht in der Umgebung vorhanden).
Ich möchte die Desktop-Umgebung von Ubuntu vorerst auch unter Android verwenden (Termux-Version - japanische Eingabe in der Desktop-Umgebung).
Einführung in Python Bereiten wir die Entwicklungsumgebung vor
Ich möchte Datetime.now in Djangos Test reparieren
Ich möchte mit Python ein Fenster erstellen
Wie auch immer, ich möchte JSON-Daten einfach überprüfen
Ich möchte mit dem Reim part7 (BOW) umgehen
Ich möchte DB-Informationen in einer Liste speichern
Ich möchte verschachtelte Dicts in Python zusammenführen
Von 0 bis Django Entwicklungsumgebung Konstruktion bis Grundbetrieb
Ich möchte das Erscheinungsbild von zabbix anpassen
Ich möchte die Aktivierungsfunktion Mish verwenden
Ich möchte visualisieren, wo und wie viele Leute in der Fabrik sind
Ich möchte eine schöne Python-Entwicklungsumgebung für meinen neuen Mac erstellen
[Django-Memo] Ich möchte die angemeldeten Benutzerinformationen im Voraus im Formular festlegen.
Ich möchte einen Lebenszyklus in der Aufgabendefinition von ECS festlegen
Ich möchte eine Liste der WebDAV-Dateien im Modul Anfragen anzeigen
Ich möchte die Ergebnisse von% time, %% time usw. in einem Objekt (Variable) speichern.