8
8

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

HerokuAdvent Calendar 2016

Day 2

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

Posted at

バッチ作成時、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
8
8
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
8

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?