バッチ作成時、Nodeの非同期が色々便利だったりします。
メインのアプリケーションをPHPなどで作成している際でもBatchだけはNodeで回したいみたいなことがさっとできると便利なのですが、
環境変数周りが何かと不便だったりします。
通常Herokuアプリケーションでは、.env
ファイルを使用して環境変数のセットアップを行うので、
node向けに用意されている、 node-env-fileなどのモジュールを使用すれば、メインのアプリケーションと設定を共用できるのですが、
バッチ書くだけでそのモジュールを入れるのも何かと面倒です。
このようなケースでは、heroku local
コマンドを利用すると便利です。
heroku local
コマンド経由で Procfile 内定義のコマンドを実行する場合、.env
ファイルが自動的に読み込まれるようです。
.env ファイルの作成
すでにある場合は作成不要。リポジトリルートに置いてください。
Heroku の環境変数を.env ファイルに流し込む際は以下のコマンドで
$ heroku config -s >> .env
Procfile を作成する
Procfile
に実行したいコマンドを名前付きで記述します。
# see https://devcenter.heroku.com/articles/custom-php-settings
web: vendor/bin/heroku-php-apache2 public/
check: node scripts/checker.js
実行ファイルを作成する
Procfile
で記述した箇所に適当にJSの実行ファイルを設置します。
.env
から読み込みたい値は process.env
で参照可能です。
"use strict"
const pg = require("pg");
const connect = new Promise(()=>{
pg.connect(process.env.DATABASE_URL+"?ssl=true",(err,client,done) => {
if(err){
throw err;
}
client.query("SELECT * FROM tbl_urls limit 5000",(err,result)=>{
if(err){
throw err;
}
done();
resolve(result)
})
});
})
connect.then((result)=>{
console.log("data loaded");
})
heroku local で実行する
heroku local コマンドを利用して実行します。
$ heroku local check