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.)
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
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.
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
Lassen Sie uns zunächst die periodische Verarbeitung in Heroku einrichten. Wir werden danach vorgehen.
https://devcenter.heroku.com/articles/clock-processes-python
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.
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.)
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.
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. Sie können dies über einen Befehl anstelle eines Browsers tun. Ich wollte das Dashboard verwenden.
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
Wenn es sicher funktioniert, fügen Sie den Inhalt mithilfe der Shotgun-API zu clock.py hinzu.
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
"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".
"** 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.
Auch vom Befehl (ry, aber vom Dashboard aus. Sie können Umgebungsvariablen in "Konfigurationsvariablen" unter "Einstellungen" ganz rechts festlegen.
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.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.
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)
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()
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.
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.
--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.
Apropos, es scheint, dass ein Web-Hook angebracht ist. Ich freue mich darauf.
https://developer.shotgunsoftware.com/ja/3d448f5e/
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