Help us understand the problem. What is going on with this article?

Heroku で Node使うときは heroku local コマンドが便利

More than 3 years have passed since last update.

バッチ作成時、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
mikakane
PHPerです。がんばります。
http://chatbox-inc.com
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away