2017-01-25 13 views
1

私はhapi.jsを使用してnodejsアプリケーションを持っており、URLから画像をダウンロードしようとしています。ヘロクは私に道筋をつけてエラーを出している。Heroku nodejs pathing issue ...エラー:ENOENT:そのようなファイルまたはディレクトリがありません

マイコード:

Request(uri).pipe(fs.createWriteStream(__dirname+'/../public/images/'+filename)).on('close', callback); 

マイエラー:

Error: ENOENT: no such file or directory, open '/app/../public/images/1430540759757341747_4232065786.jpg' 

マイファイル構造は単純です:あなたはHerokuのアプリケーションのための__dirnameを見ることができるように

app.js 
-public 
-images 
    -sampleimage.jpg 
-videos 
    -samplevideo.mp4 
-audio 
    -sampleaudio.wav 

は/アプリです。私は__dirname + 'あらゆる種類のパス/ ../etc'を使って試してみましたが、私は__dirnameなしでも試しました。

ffmpegと音声ツールを使用して、これらのファイルをたくさん作成します。だから誰も私にどのような問題があるのか​​私に説明することができますか?正しいパス名を使用して解決できるものか、設定する必要のあるhapijsサーバーの設定ですか?

答えて

1

プロジェクトに間違ったパスがあるだけです。

ヘロクでは、プロジェクトのルートを下のフォルダに書き込むことはできません。

あなたのコードはapp.jsで実行されています。これはプロジェクトの「ルート」フォルダにあります。

ので、Herokuののファイルシステム上で、このプロジェクトは、次のようになります意味:

/app 
/app/app.js 
/app/public 
/app/public/images 
... 

Herokuのはappというフォルダの中にすべてのコードを置きます。

は今、上記の貼り付けコード内に、あなたが示しています、あなたがしようとしている:

Request(uri).pipe(fs.createWriteStream(__dirname+'/../public/images/'+filename)).on('close', callback); 

このコードは、あなたのapp.jsで実行されている場合、それはBACKフォルダ(..などを)行くことを意味Herokuのファイルシステムの書き込み不可能な部分に書き込みます。

代わりに、あなたが書きたい:あなたが望むようにこれは正しく画像にファイルを書き込みます

Request(uri).pipe(fs.createWriteStream(__dirname+'/public/images/'+filename)).on('close', callback); 

はフォルダ。物事は一瞬のために複雑に得ようとしているのはここ

もつとも

です。

ヘロクでは、実際にファイルシステムにファイルを書き込むことはできますが、短期間にはDISAPPEARになります。

HerokuのファイルシステムはEPHEMERALです。これは存在しないように扱わなければならないことを意味します。

Herokuがこれを行う理由は、スケーラブルなソフトウェアの作成を強制するためです。

アプリケーションがWebサーバーのディスクにファイルを書き込む場合、アプリケーションの規模はそれほど大きくなりません。その理由は、ディスク容量が限られているからです。各Webサーバーには独自のディスクがあります。これは、各Webサーバが同じファイルのコピーを持っているなど混乱している/奇妙な動作につながる可能性があります。それはちょうど良い習慣ではありません。

代わりに、ファイル保存サービス(通常はAmazon S3)を使用してファイルを中央の場所に保存します。

このサービスを使用すると、すべてのファイルを中央の場所に保存できます。これは以下を意味します。

  • すべてのWebサーバーから簡単にファイルにアクセスできます。
  • 会社によって管理されている「信頼できる」ストレージを持つことができます。
  • ウェブアプリケーションをより適切にスケールすることができます。
+0

こんにちは、s3の使用に関するアドバイス。これはプロトタイプなので、今はストレージに関してあまりにも騒がれていません。私はFFMPEGを使って画像/オーディオでスライドショーを作成しているので、今のところそれを書いています 私はそのコードを試してみて、同じエラーが出ます。 エラー:ENOENT:そのようなファイルやディレクトリはありません。 '/app/public/images/1435595969584256195_4232065786.jpg' herokuがすでにファイル構造を変更していたため、ルートの下に移動する必要があると思っていました。だから私は今どのような問題を抱えていますか?フォルダが存在しないのですか? – Jason

関連する問題