質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

87.80%

[Heroku+Node.js]ローカル環境で動くが、デプロイした本番環境では動かない。

解決済

回答 2

投稿

  • 評価
  • クリップ 0
  • VIEW 3,119

score 10

お世話になります。
過去に似たようなタイトルの投稿がありましたが、少し私の困っている内容とは異なっておりましたので、投稿させて頂きました。

タイトルの通り、[Heroku+Node.js]で開発しているアプリがあるのですが、
ローカル環境では動いているのに、デプロイした本番環境では動かなくて困っています。
以下に、簡単にですが、自身の環境を記載します。


**==========================================================

【やろうとしていること】
・「mecab-lite」を使用した形態解析。
・「cheerio-httpcli」を使用した、特定URLの内容のスクレピング。

【エラーログ 抜粋】
Error: Command failed: /bin/sh -c mecab "/app/tmp/mecab_tmp-in1447081450486_0.9399180100299418" --output="/app/tmp/__mecab_tmp-out_1447081450486_0.9399180100299418" 
Nov 09 07:04:11 limitless-coast-3133 app/web.1:  /bin/sh: 1: mecab: not found 
Nov 09 07:04:11 limitless-coast-3133 app/web.1:  [検索するワード]undefined 
Nov 09 07:04:11 limitless-coast-3133 app/web.1:  [受け取ったワード]undefined 
Nov 09 07:04:11 limitless-coast-3133 app/web.1:  URL:undefined 
Nov 09 07:04:11 limitless-coast-3133 app/web.1:  url.js:110 
Nov 09 07:04:11 limitless-coast-3133 app/web.1:      throw new TypeError("Parameter 'url' must be a string, not " + typeof url) 
Nov 09 07:04:11 limitless-coast-3133 app/web.1:            ^ 
Nov 09 07:04:11 limitless-coast-3133 app/web.1:  TypeError: Parameter 'url' must be a string, not undefined 
Nov 09 07:04:11 limitless-coast-3133 app/web.1:      at Url.parse (url.js:110:11) 
Nov 09 07:04:11 limitless-coast-3133 app/web.1:      at Object.urlParse [as parse] (url.js:104:5) 
Nov 09 07:04:11 limitless-coast-3133 app/web.1:      at Object.module.exports.prepare (/app/node_modules/cheerio-httpcli/lib/client.js:267:28) 
Nov 09 07:04:11 limitless-coast-3133 app/web.1:      at Object.module.exports.run (/app/node_modules/cheerio-httpcli/lib/client.js:304:24) 
Nov 09 07:04:11 limitless-coast-3133 app/web.1:      at Object.cheerioHttpCli.fetch (/app/node_modules/cheerio-httpcli/lib/core.js:63:19) 
Nov 09 07:04:11 limitless-coast-3133 app/web.1:      at SearchBot.getSearchContent (/app/server-search.js:56:12) 
Nov 09 07:04:11 limitless-coast-3133 app/web.1:      at Object.getResponse (/app/server-search.js:24:11) 
Nov 09 07:04:11 limitless-coast-3133 app/web.1:      at Bot.callback (/app/index.js:101:17) 
Nov 09 07:04:11 limitless-coast-3133 app/web.1:      at /app/server-bot_1.js:77:12 
Nov 09 07:04:11 limitless-coast-3133 app/web.1:      at /app/node_modules/mecab-lite/lib/mecab-lite.js:101:27 

※一部console.logで出力しているメッセージもあります。

【package.js】
"dependencies": {
    "cheerio-httpcli": "^0.3.6",
    "cool-ascii-faces": "1.3.1",
    "ejs": "2.3.3",
    "express": "4.13.3",
    "mecab-lite": "0.0.8",
    "iconv": "*",
    "mongodb": "^2.0.48",
    "pg": "4.x",
    "request": "^2.65.0"
  },
"engines": {
    "node": "0.12.7"
  },
  "repository": {
    "type": "git",
    "url": "https://github.com/heroku/node-js-getting-started"
  },
  "keywords": [
    "node",
    "heroku",
    "express"
  ],

※関連しそうな部分のみ記載

==========================================================**


エラー内容的に、本番環境に「mecab」等のモジュールのインストールが出来ていないことが原因だと思うのですが、
そもそもHeroku環境にどうやってモジュールをインストールすれば良いのかが、調べても分かりませんでした。
(package.jsには、必要と思われるモジュールを記載しているつもりです)
あと「throw new TypeError("Parameter 'url' must be a string, not " + typeof url)」というエラーが出ているのも気になります。

何か解決の手掛かりをご教示頂ければと思い、投稿させて頂きました。
お力添えのほど、よろしくお願い致します。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 2

checkベストアンサー

+1

package.jsonを見るとmecab-liteはインストールされているようですが、mecabがheroku上にインストールされていないように見えます。

個人的には外部プロセスが必要なmecabよりもkuromoji.jsの方が簡単でJavaScriptだけで済むのでおすすめします。

https://github.com/takuyaa/kuromoji.js

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2015/11/16 17:56

    yosuke様

    コメントありがとうございます。
    あれからずっと色々と試してみたのですが、エラーの解決が出来ず困り果てておりました。

    昨日、yosuke様に紹介頂いたkuromojiを試したところ、無事にHeroku上で、形態素解析を行うことが出来ました。
    まだ辞書登録など課題は残っておりますが、少し前進することが出来て、大変嬉しく思っております。

    本当にありがとうございました。

    キャンセル

+1

こちら を使用して、必要なモジュールをインストールできないか、試してみてはいかがでしょうか。
Heroku buildpack: linuxbrewを作りました。
linuxbrewを使って任意のパッケージを Heroku にデプロイできます。
 
linuxbrew でインストールできるパッケージ
braumeister.orgで探してください。
少なくとも、mecab Ver.0.996 はインストール可能なようです。

気になっていると仰っているエラーも、必要なモジュールがインストール出来ていないために発生しているように見受けられます。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2015/11/10 22:22 編集

    pi-chan様
    回答頂きまして、ありがとうございます。
    残念ながら、紹介頂いたサイトをもとに調べてみましたが、
    私の基本的な知識が足らないこともあり、解決に至りませんでした。

    私の環境はWindowsなのですが、このLinuxbrewを使用した方法は可能なのでしょうか?(デプロイ先がHerokuなので、問題ないと認識しております)


    私がそのサイトを解釈して実行した手順は、下記の通りです。

    ==============================

    ①自分のGitアカウントを作成し、"heroku-buildpack-linuxbrew"をコミット。
    ②上記①で作成したソースに、".cellar"と".buildpacks "を作成し、それぞれのファイル内に必要な内容を記述。
    (".cellar ファイル内":mecab)
    (".buildpacks ファイル内":https://github.com/heroku/heroku-buildpack-nodejs.git

    ③サイトの手順に沿って、下記のコマンドを実行。
    $ heroku create --buildpack https://github.com/heroku/heroku-buildpack-multi
    $ heroku config:add LD_LIBRARY_PATH=/app/.linuxbrew/lib
    $ git push heroku master

    ==============================


    と実行してみましたが、mecabがインストールされた形跡はなく、
    同じエラーが出力されました。
    この解釈もしくは方法は誤っているのでしょうか?

    そもそもコマンドはそのまま実行しても良いのか、それともあくまで参考であり、自身の環境に置き換えて記述しないといけないのかも分からない状況です…。

    重ね重ね恐縮ですが、ご教示頂ければ幸いです。
    よろしくお願い致します。

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 87.80%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る