Ceci est une suite de cet article
[Python + heroku] De l'état sans Python à l'affichage de quelque chose avec heroku (Partie 1) http://qiita.com/it_ks/items/afd1bdb792d41d0e1145 (Partie 2) http://qiita.com/it_ks/items/ca6c7f6e8fc89e49e46d
La raison pour laquelle je touchais heroku ces jours-ci était d'utiliser ** l'API Shotgun ** pour traiter les fusils de chasse.
GUNCY'S Co., Ltd. Projet Road to Stingray J'ai participé en tant que personnel de configuration Shotgun. Ici, je pense que ce serait bien si je pouvais écrire les connaissances que j'ai acquises sur Shotugn (dans le futur). Je n'ai pas pu aller trop loin, donc j'ai l'impression que la portée est limitée à la version officiellement publiée (version japonaise) ...
Je pense qu'il s'agit d'un cas de projet de taille relativement petite à moyenne et de sites multiples (travail à distance). (Shotgun est également utilisé dans des productions de 100 à 1000 personnes, mais je me demande si ce sera une histoire différente de ce cas)
La balise ** "Shotgun" ** dans qiita Il était déjà utilisé dans le thème de la bibliothèque ruby du même nom. Donc, je pense qu'il serait préférable pour chaque personne de vivre séparément avec le tag "Shotgun Softrware". Si vous avez lu cet article et souhaitez publier un article sur Shotgun, Si vous êtes d'accord avec l'intention, nous vous serions reconnaissants si vous pouviez le taguer de la même manière.
Shotgun
https://shotgunsoftware.com/ (Agence nationale) https://www.borndigital.co.jp/software/4070.html
S'il est possible de gérer diverses situations, C'est un bijou qui a un côté assez jaja cheval sans configuration (* C'est une impression individuelle)
API Il est publié sur github.
https://github.com/shotgunsoftware/python-api
wiki
https://github.com/shotgunsoftware/python-api/wiki
Pipeline Toolkit C'est un terme général pour un groupe de kits préparés pour envelopper l'API ci-dessus, créer un lien avec divers outils externes et étendre Shotgun (Web). https://support.shotgunsoftware.com/entries/94042238-Toolkit-Home-Page Je ne m'en occuperai pas cette fois.
Comme l'API, elle est publiée sur github, et c'est principalement celle avec "** tk - **" dans la tête. tk est une abréviation de tool kit. https://github.com/shotgunsoftware
Dans le ftrack présenté dans cet article (↓) http://qiita.com/it_ks/items/374a320bc8282c7f65a8 On peut dire qu'il est équivalent à "ftrack connect".
Document officiel:
Scheduled Jobs with Custom Clock Processes in Python with APScheduler https://devcenter.heroku.com/articles/clock-processes-python
Just qiita a un article en heroku et en python
Obtenez des taux de change réguliers avec Heroku et téléchargez des journaux sur Amazon S3 http://qiita.com/gumob@github/items/ca5d76186f94e592a5f0
Le traitement périodique lui-même utilise le module "** APScheduler **". Si vous recherchez avec AP Schuler, celui qui apparaît en haut est ici.
Une petite planification avancée des travaux avec APScheduler http://qiita.com/yushin/items/a026626dbb291dd43dd8
Commençons par configurer le traitement périodique dans heroku. Nous procéderons selon cela.
https://devcenter.heroku.com/articles/clock-processes-python
Après être descendu dans l'application et activé l'environnement vertical (← c'est le contenu jusqu'à la dernière fois),
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
Aussi,
Dans requirements.txt
APScheduler==3.0.0
Je vais ajouter.
clock.py Préparez un script Python que vous souhaitez traiter régulièrement. Il est nommé "clock.py" selon le document précédent.
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()
Tout d'abord, le contenu du script est le même que celui du document.
Il y a deux emplois.
Ajoutez le contenu suivant à ** Procfile **.
clock: python clock.py
clock:
est le nom du paramètre, et python ~ ~
est la commande que vous voulez exécuter.
Autant que décrit dans le Procfile, il apparaîtra sur le tableau de bord heroku sur le Web et peut être activé / désactivé respectivement.
Avec l'heroku gratuit, un seul peut être activé, donc si vous en désactivez un, vous pouvez l'activer.
(Les détails de l'activation / de la désactivation seront décrits plus tard)
git add .
et git commit -m" hogehoge "ʻet
git push heroku master`.
Dans l'ajout et la validation, diverses choses s'écouleront selon la quantité d'APScheduler ajoutée précédemment.
Si c'est un document
heroku ps:scale clock=1
Il dit, mais avec cela, vous pouvez changer l '"horloge" ajoutée au fichier Proc en "1 (= valide. ON)".
Cependant, comme un processus appelé "web" est déjà en cours d'exécution, il n'est pas possible de l'exécuter dans cet état.
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
Connectez-vous à heroku avec un navigateur, désactivez le déjà activé, puis activez "horloge". Vous pouvez le faire à partir d'une commande au lieu d'un navigateur. Je voulais utiliser le tableau de bord.
Maintenant, le processus appelé "clock" a démarré et le contenu de clock.py est exécuté. Je voudrais voir le journal. En regardant le journal d'heroku ↓
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
(Omis)
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.
Il a commencé à bouger en toute sécurité
Lorsqu'il commence à fonctionner en toute sécurité, ajoutez le contenu à l'aide de l'API Shotgun à clock.py.
Pip selon installation sur github. https://github.com/shotgunsoftware/python-api#installing
pip install git+git://github.com/shotgunsoftware/python-api.git
Si vous voulez corriger la version, c'est ici, donc
pip install git+git://github.com/shotgunsoftware/[email protected]
J'ai écrit ceci dans requirements.txt. À propos, v3.0.25 à ce moment-là
Les «utilisateurs» dans Shotgun sont divisés en «** utilisateur humain » et « utilisateur de script **». Le premier est le soi-disant utilisateur, et le second est un script tel que Pipeline Toolkit. Du point de vue du fusil de chasse, la personne qui accède à la fois aux personnes et aux scripts est l'utilisateur. Enregistrons un ScriptUser pour y accéder depuis heroku.
Après vous être connecté à Shotgun, ouvrez "Scripts" dans le menu en haut à droite et cliquez sur "+ Scripts".
"** Nom du script " à enregistrer ici, " Clé d'application **" obtenue après inscription, Et l'URL du serveur ** Shotgun sous licence ** ("https: // {studio-name} .shotgunstudio.com") J'en aurai besoin la prochaine fois, alors prenez-en note.
De plus, comme cela me rend excité, ajoutons une icône appropriée à ScriptUser.
Même à partir de la commande (ry, mais depuis le tableau de bord. Vous pouvez définir des variables d'environnement dans "Variables de configuration" sous "Paramètres" à l'extrême droite.
Appuyez sur "Reveal Config Vars" pour le montrer caché. Alors ↓ Ce sera comme ça. ![config_var_02.png](https://qiita-image-store.s3.amazonaws.com/0/102581/9279b953-428a-8da9-ba14-19b5d2019edc.png) J'ai enregistré le "nom du script", la "clé d'application" et l '"URL" que j'ai notées plus tôt.Les variables d'environnement que vous avez renseignées précédemment sont dans le script Python ʻOs.environ.get ('{nom de la variable}') ` Vous pouvez l'utiliser en écrivant comme. Je l'ai ajouté à clock.py comme ça ↓
python
import os
SG_KEY = os.environ.get('SG_KEY')
SG_SCRIPT = os.environ.get('SG_SCRIPT')
SG_SERVER = os.environ.get('SG_SERVER')
Soyez prudent car si vous vous y habituez, vous risquez d'oublier d'écrire import os.
Shotgun() - Usage Example @Reference: Methods https://github.com/shotgunsoftware/python-api/wiki/Reference%3A-Methods#usage-example
↑ Importez et recevez l'instance de cette manière
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)
Cette fois, je rechercherai un projet nommé ** "TEST" ** et le publierai dans le journal.
Cette fois, il n'y a qu'un seul résultat renvoyé, donc La méthode à utiliser est find_one.
sg.find_one("Project",[['name','is','TEST']],[])
S'il atteint, il sera renvoyé en tant que ** type de dictionnaire ** avec le type de données (type d'entité) et l'ID sur Shotgun comme ceci.
{'type': 'Project', 'id': 69}
Le script créé en incorporant ceci ressemble à ceci ↓
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()
journaux push et heroku.
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})
(Omis)
La valeur de retour qui a été recherchée et atteinte est imprimée toutes les 3 minutes. J'ai atteint mon objectif de faire quelque chose sur une base régulière.
--Ajouter un processus à Procfile, l'activer sur le tableau de bord --Préparation d'un script à l'aide de l'API Shotgun
Cependant, la version gratuite d'heroku a toujours besoin de dormir plus de 6 heures par jour, vous ne pouvez donc pas la faire tourner tout le temps.
--Utilisez le traitement de l'API Shotgun autre que find (créer, mettre à jour, etc.) --Utilisez l'API Shotgun, qui n'est pas un processus régulier
Etc. sont possibles.
En parlant de cela, il semble qu'un crochet Web soit attaché. J'ai hâte d'y être.
https://developer.shotgunsoftware.com/ja/3d448f5e/
find_one https://github.com/shotgunsoftware/python-api/wiki/Reference%3A-Methods#find_one
Comment écrire un filtre utilisé pour la recherche Reference: Filter Syntax https://github.com/shotgunsoftware/python-api/wiki/Reference%3A-Filter-Syntax
Recommended Posts