[PYTHON] Mach regelmäßig etwas von Heroku bis Shotgun

Was ist das?

Dies ist eine Fortsetzung dieses Artikels

[Python + Heroku] Vom Zustand ohne Python zur Anzeige von etwas mit Heroku

(Teil 2) http://qiita.com/it_ks/items/ca6c7f6e8fc89e49e46d Der Grund, warum ich Heroku in diesen Tagen berührte, war die Verwendung der ** Shotgun API ** zur Verarbeitung von Schrotflinten. Beilage 1: Hintergrund der Verwendung des Projekts Road to Stingray von GUNCY'S Co., Ltd. Ich habe als Shotgun-Setup-Mitarbeiter teilgenommen. Hier denke ich, es wäre schön, wenn ich das Wissen, das ich über Shotugn gewonnen habe, (in Zukunft) schreiben könnte. Ich konnte nicht zu tief gehen, daher habe ich das Gefühl, dass der Umfang auf die offiziell veröffentlichte (japanische Version) beschränkt ist ...

Ich denke, dies ist ein Fall von einem relativ kleinen bis mittelgroßen Projekt und mehreren Standorten (Remote-Arbeit). (Schrotflinte wird auch in Produktionen von 100 bis 1000 Personen verwendet, aber ich frage mich, ob es eine andere Geschichte als in diesem Fall sein wird.)

Beilage 2: Tag

Das ** "Shotgun" -Tag ** in Qiita Es wurde bereits im Thema der gleichnamigen Rubinbibliothek verwendet. Daher denke ich, dass es für jede Person besser wäre, separat mit dem Tag "Shotgun Softrware" zu leben. Wenn Sie diesen Artikel gelesen haben und einen Artikel über Shotgun veröffentlichen möchten, Wenn Sie der Absicht zustimmen, würden wir uns freuen, wenn Sie sie auf die gleiche Weise kennzeichnen könnten.

Shotgun sg_01.png

https://shotgunsoftware.com/ (Inlandsagentur) https://www.borndigital.co.jp/software/4070.html

Während es möglich ist, mit verschiedenen Situationen umzugehen, Es ist ein Juwel, das eine Seite hat, die ein ziemlich jaja Pferd ohne Setup ist (* Es ist ein individueller Eindruck)

API Es wird auf Github veröffentlicht.

https://github.com/shotgunsoftware/python-api

wiki

https://github.com/shotgunsoftware/python-api/wiki

Pipeline Toolkit Dies ist ein allgemeiner Begriff für eine Gruppe von Kits, die darauf vorbereitet sind, die oben genannte API zu verpacken, mit verschiedenen externen Tools zu verknüpfen und Shotgun (Web) zu erweitern. https://support.shotgunsoftware.com/entries/94042238-Toolkit-Home-Page Ich werde mich diesmal nicht damit befassen.

Wie die API wird sie auf Github veröffentlicht und ist hauptsächlich die mit "** tk - **" im Kopf. tk ist eine Abkürzung für Toolkit. https://github.com/shotgunsoftware

In dem in diesem Artikel vorgestellten ftrack (↓) http://qiita.com/it_ks/items/374a320bc8282c7f65a8 Es kann als äquivalent zu "ftrack connect" bezeichnet werden.

Heroku-Zeitplanverarbeitung

Offizielles Dokument:

Scheduled Jobs with Custom Clock Processes in Python with APScheduler https://devcenter.heroku.com/articles/clock-processes-python

Nur Qiita hat einen Artikel in Heroku und Python

Erhalten Sie regelmäßige Wechselkurse mit Heroku und laden Sie Protokolle zu Amazon S3 hoch http://qiita.com/gumob@github/items/ca5d76186f94e592a5f0

Die periodische Verarbeitung selbst verwendet das Modul "** APScheduler **". Wenn Sie mit AP Schuler suchen, finden Sie hier den oben angezeigten.

Eine etwas erweiterte Jobplanung mit APScheduler http://qiita.com/yushin/items/a026626dbb291dd43dd8


Vorbereitung für die regelmäßige Verarbeitung

Lassen Sie uns zunächst die periodische Verarbeitung in Heroku einrichten. Wir werden danach vorgehen.

https://devcenter.heroku.com/articles/clock-processes-python

AP Schuler vorgestellt

Nachdem Sie zur App gegangen sind und die vertikale Umgebung aktiviert haben (← dies ist der Inhalt bis zum letzten Mal),

pip install apscheduler

python


(sgenv) >pip install apscheduler
Collecting apscheduler
  Downloading APScheduler-3.0.5-py2.py3-none-any.whl (49kB)
    100% |################################| 53kB 2.4MB/s
Requirement already satisfied (use --upgrade to upgrade): six in c:\users\path\to\app\sgenv\lib\site-packages (from apscheduler)
Collecting futures (from apscheduler)
  Downloading futures-3.0.4-py2-none-any.whl
Collecting pytz (from apscheduler)
  Downloading pytz-2015.7-py2.py3-none-any.whl (476kB)
    100% |################################| 479kB 853kB/s
Collecting tzlocal (from apscheduler)
  Downloading tzlocal-1.2.tar.gz
Building wheels for collected packages: tzlocal
  Running setup.py bdist_wheel for tzlocal ... done
  Stored in directory: C:\Users\{user}\AppData\Local\pip\Cache\wheels\39\8d\3b\21db6b23bc7483a2e1cf391865427e8fbd09022
3d9db2cfab3
Successfully built tzlocal
Installing collected packages: futures, pytz, tzlocal, apscheduler
Successfully installed apscheduler-3.0.5 futures-3.0.4 pytz-2015.7 tzlocal-1.2

Ebenfalls, In den Anforderungen.txt APScheduler==3.0.0 Ich werde hinzufügen.

clock.py Bereiten Sie ein Python-Skript vor, das Sie regelmäßig verarbeiten möchten. Es heißt "clock.py" gemäß dem vorherigen Dokument.

clock.py


from apscheduler.schedulers.blocking import BlockingScheduler

sched = BlockingScheduler()

@sched.scheduled_job('interval', minutes=3)
def timed_job():
    print('This job is run every three minutes.')

@sched.scheduled_job('cron', day_of_week='mon-fri', hour=17)
def scheduled_job():
    print('This job is run every weekday at 5pm.')

sched.start()

Zunächst ist der Inhalt des Skripts mit dem des Dokuments identisch.

Es gibt zwei Jobs.

Zu Procfile hinzugefügt

Fügen Sie ** Procfile ** den folgenden Inhalt hinzu.

clock: python clock.py

clock: ist der Einstellungsname und python ~ ~ ist der Befehl, den Sie ausführen möchten. Soweit im Procfile beschrieben, wird es im Heroku-Dashboard im Web angezeigt und kann ein- bzw. ausgeschaltet werden. Mit dem kostenlosen Heroku kann nur eines aktiviert werden. Wenn Sie also eines ausschalten, können Sie es einschalten. (Die Details zum Ein- und Ausschalten werden später beschrieben.)

Bereitstellen

git add . und git commit -m" hogehoge " und git push heroku master. Beim Hinzufügen und Festschreiben ergeben sich verschiedene Faktoren aus der Menge des zuvor hinzugefügten APSchedulers.

Rahmen

Wenn es ein Dokument ist heroku ps:scale clock=1 Es heißt, aber damit können Sie die dem Procfile hinzugefügte "Uhr" auf "1 (= gültig. EIN)" ändern. Da jedoch bereits ein Prozess namens "web" ausgeführt wird, ist es ungültig, ihn in diesem Zustand auszuführen.

python


>heroku ps:scale clock=1
Scaling dynos... failed
 !    Please verify your account in order to change resources (please enter a credit card) For more information, see htt
ps://devcenter.heroku.com/categories/billing Verify now at https://heroku.com/verify

Melden Sie sich mit einem Browser bei Heroku an, schalten Sie die bereits eingeschaltete aus und schalten Sie dann "Uhr" ein. freedynos.png Sie können dies über einen Befehl anstelle eines Browsers tun. Ich wollte das Dashboard verwenden.

Bestätigung

Jetzt hat der Prozess "clock" begonnen und der Inhalt von clock.py wird ausgeführt. Ich möchte das Protokoll sehen. Beim Betrachten von Herokus Protokoll ↓

heroku logs

python


>heroku logs
2016-02-02T13:36:08.456761+00:00 app[web.1]:     res = instance.__dict__[self.name] = self.func(instance)
2016-02-02T13:36:08.456761+00:00 app[web.1]:   File "/app/.heroku/python/lib/python2.7/site-packages/django/utils/functional.py", line 33, in __get__
2016-02-02T13:36:08.456762+00:00 app[web.1]:   File "/app/.heroku/python/lib/python2.7/site-packages/django/core/urlresolvers.py", line 417, in url_patterns
2016-02-02T13:36:08.456763+00:00 app[web.1]:     patterns = getattr(self.urlconf_module, "urlpatterns", self.urlconf_module)
2016-02-02T13:36:08.456765+00:00 app[web.1]:   File "/app/.heroku/python/lib/python2.7/site-packages/django/core/urlresolvers.py", line 410, in urlconf_module
(Weggelassen)
2016-02-08T12:23:23.304081+00:00 heroku[api]: Scale to web=0 by 〜〜@gmail.com
2016-02-08T12:23:24.758985+00:00 heroku[api]: Scale to clock=1 by 〜〜@gmail.com
2016-02-08T12:23:29.007235+00:00 heroku[clock.1]: Starting process with command `python clock.py`
2016-02-08T12:23:29.571304+00:00 heroku[clock.1]: State changed from starting to up
2016-02-08T12:26:30.559161+00:00 app[clock.1]: This job is run every three minutes.

Es begann sich sicher zu bewegen

Verwenden Sie die Shotgun API

Wenn es sicher funktioniert, fügen Sie den Inhalt mithilfe der Shotgun-API zu clock.py hinzu.

API-Vorbereitung

Pip gemäß Installation auf Github. https://github.com/shotgunsoftware/python-api#installing

pip install git+git://github.com/shotgunsoftware/python-api.git

Wenn Sie die Version reparieren möchten, finden Sie sie hier pip install git+git://github.com/shotgunsoftware/[email protected] Ich habe dies in der Datei require.txt geschrieben. Übrigens v3.0.25 zu dieser Zeit

Registrieren Sie den Skriptbenutzer bei Shotgun

"Benutzer" in Shotgun sind in "** Human User " und " Script User **" unterteilt. Ersteres ist der sogenannte Benutzer, und letzteres ist ein Skript wie das Pipeline Toolkit. Aus Sicht der Schrotflinte ist die Person, die sowohl auf Personen als auch auf Skripte zugreift, der Benutzer. Registrieren wir einen ScriptUser, um von Heroku aus darauf zuzugreifen.

Nachdem Sie sich bei Shotgun angemeldet haben, öffnen Sie "Skripte" aus dem Menü oben rechts und klicken Sie auf "+ Skripte". sg_scriptuser.png

"** Skriptname " hier registrieren, " Antragsschlüssel **" nach Registrierung erhalten, Und die lizenzierte ** Shotgun Server URL ** ("https: // {Studio-Name} .shotgunstudio.com") Ich werde es das nächste Mal brauchen, also notiere es dir.

Da ich mich dadurch aufgeregt fühle, fügen wir ScriptUser ein entsprechendes Symbol hinzu.

Registrieren Sie Umgebungsvariablen in Heroku

Auch vom Befehl (ry, aber vom Dashboard aus. Sie können Umgebungsvariablen in "Konfigurationsvariablen" unter "Einstellungen" ganz rechts festlegen.

config_var_01.png Drücken Sie "Reveal Config Vars", um es versteckt anzuzeigen. Dann ↓ wird es so sein. ![config_var_02.png](https://qiita-image-store.s3.amazonaws.com/0/102581/9279b953-428a-8da9-ba14-19b5d2019edc.png) Ich habe den "Skriptnamen", den "App-Schlüssel" und die "URL" registriert, die ich zuvor notiert habe.

Umgebungsvariablen lesen

Die zuvor ausgefüllten Umgebungsvariablen befinden sich im Python-Skript os.environ.get ('{Variablenname}') Sie können es verwenden, indem Sie wie schreiben. Ich habe es wie folgt zu clock.py hinzugefügt ↓

python


import os

SG_KEY = os.environ.get('SG_KEY')
SG_SCRIPT = os.environ.get('SG_SCRIPT')
SG_SERVER = os.environ.get('SG_SERVER')

Seien Sie vorsichtig, denn wenn Sie sich daran gewöhnen, vergessen Sie möglicherweise, Import-Betriebssysteme zu schreiben.

Holen Sie sich Schrotflinte Objekt

Shotgun() - Usage Example @Reference: Methods https://github.com/shotgunsoftware/python-api/wiki/Reference%3A-Methods#usage-example

↑ Importieren und empfangen Sie die Instanz auf diese Weise

python


import os
from shotgun_api3 import Shotgun

### get sg object ###
SG_KEY = os.environ.get('SG_KEY')
SG_SCRIPT = os.environ.get('SG_SCRIPT')
SG_SERVER = os.environ.get('SG_SERVER')

sg = Shotgun(SG_SERVER, SG_SCRIPT, SG_KEY)

Suchen Sie nach Schrotflinten und drucken Sie die Ergebnisse alle 3 Minuten

Dieses Mal werde ich nach einem Projekt mit dem Namen ** "TEST" ** suchen und es in das Protokoll ausgeben.

Diesmal wird also nur ein Ergebnis zurückgegeben Die verwendete Methode ist find_one.

sg.find_one("Project",[['name','is','TEST']],[])

Wenn es trifft, wird es als ** Wörterbuchtyp ** mit Datentyp (Entitätstyp) und ID auf Shotgun wie folgt zurückgegeben. {'type': 'Project', 'id': 69}

Das Skript, das durch Einbeziehen dieses Skripts erstellt wurde, sieht folgendermaßen aus: ↓

clock.py


import os
from shotgun_api3 import Shotgun
from apscheduler.schedulers.blocking import BlockingScheduler

### get sg object ###
SG_SERVER = os.environ.get('SG_SERVER')
SG_SCRIPT = os.environ.get('SG_SCRIPT')
SG_KEY = os.environ.get('SG_KEY')
sg = Shotgun(SG_SERVER, SG_SCRIPT, SG_KEY)

sched = BlockingScheduler()

@sched.scheduled_job('interval', minutes=3)
def timed_job():
    testPrj = sg.find_one("Project",[['name','is','TEST']],[])
    print('every 3min search...',testPrj)

sched.start()

Bestätigung

Push- und Heroku-Protokolle.

python


2016-02-08T12:42:19.165168+00:00 heroku[clock.1]: State changed from crashed to starting
2016-02-08T12:42:23.381828+00:00 heroku[clock.1]: Starting process with command `python clock.py`
2016-02-08T12:42:24.077203+00:00 heroku[clock.1]: State changed from starting to up
2016-02-08T12:45:27.542367+00:00 app[clock.1]: ('every 3min search...', {'type': 'Project', 'id': 69})
2016-02-08T12:48:27.586542+00:00 app[clock.1]: ('every 3min search...', {'type': 'Project', 'id': 69})
2016-02-08T12:51:27.559255+00:00 app[clock.1]: ('every 3min search...', {'type': 'Project', 'id': 69})
(Weggelassen)

Der zurückgegebene und getroffene Rückgabewert wird alle 3 Minuten gedruckt. Ich habe mein Ziel erreicht, regelmäßig etwas zu tun.


Zusammenfassung

Was ich getan habe

Die kostenlose Version von Heroku muss jedoch immer länger als 6 Stunden am Tag schlafen, sodass Sie sie nicht ständig drehen können.

die nächste Bereitstellung

--Verwenden Sie eine andere Shotgun-API-Verarbeitung als find (erstellen, aktualisieren usw.). --Verwenden Sie die Shotgun-API, die kein regulärer Prozess ist

Usw. sind möglich.

Nachtrag 20200207

Apropos, es scheint, dass ein Web-Hook angebracht ist. Ich freue mich darauf.

https://developer.shotgunsoftware.com/ja/3d448f5e/

Bemerkungen

find_one https://github.com/shotgunsoftware/python-api/wiki/Reference%3A-Methods#find_one

So schreiben Sie einen Filter für die Suche Reference: Filter Syntax https://github.com/shotgunsoftware/python-api/wiki/Reference%3A-Filter-Syntax

Recommended Posts

Mach regelmäßig etwas von Heroku bis Shotgun
[Python + Heroku] Vom Zustand ohne Python zur Anzeige von etwas mit Heroku (Teil 2)
Summe von 1 bis 10
Löschen Sie das cron.log regelmäßig, um ein Wachstum zu verhindern.
Ich möchte am Ende etwas mit Python machen
Änderungen von Python 3.0 zu Python 3.5
Änderungen von Python 2 zu Python 3.0
Übergang von WSL1 zu WSL2
Von der Bearbeitung bis zur Ausführung
Befehlsverlauf vom Heroku-CLI-Setup bis zum Postgre-Upgrade (MacOS)
Ich möchte so etwas wie Uniq in Python sortieren
Vom Umgebungsaufbau bis zum Einsatz für Kolben + Heroku mit Docker
So nehmen Sie erste Einstellungen für die Django-Projekterstellung vor
Was tun, wenn die Paketinstallation bei der Bereitstellung auf heroku fehlschlägt?
[Python] Exportieren Sie regelmäßig mit Lambda aus CloudWatch-Protokollen nach S3