Saya memiliki aplikasi node.js pertama saya (berjalan dengan baik secara lokal) - tetapi saya tidak dapat menggunakan via heroku (pertama kali juga w / heroku). Kode di bawah. SO tidak membiarkan saya menulis begitu banyak kode, jadi saya hanya akan mengatakan bahwa menjalankan kode secara lokal juga dalam jaringan saya tidak menunjukkan masalah.
var http = require('http');
var fs = require('fs');
var path = require('path');
http.createServer(function (request, response) {
console.log('request starting for ');
console.log(request);
var filePath = '.' + request.url;
if (filePath == './')
filePath = './index.html';
console.log(filePath);
var extname = path.extname(filePath);
var contentType = 'text/html';
switch (extname) {
case '.js':
contentType = 'text/javascript';
break;
case '.css':
contentType = 'text/css';
break;
}
path.exists(filePath, function(exists) {
if (exists) {
fs.readFile(filePath, function(error, content) {
if (error) {
response.writeHead(500);
response.end();
}
else {
response.writeHead(200, { 'Content-Type': contentType });
response.end(content, 'utf-8');
}
});
}
else {
response.writeHead(404);
response.end();
}
});
}).listen(5000);
console.log('Server running at http://127.0.0.1:5000/');
Ada ide ?
Jawaban:
Heroku secara dinamis memberikan port aplikasi kepada Anda, sehingga Anda tidak dapat mengatur port ke nomor yang tetap. Heroku menambahkan port ke env, sehingga Anda dapat menariknya dari sana. Alihkan pendengaran Anda ke ini:
Dengan begitu ia masih akan mendengarkan port 5000 ketika Anda menguji secara lokal, tetapi itu juga akan berfungsi pada Heroku.
Anda dapat memeriksa dokumen Heroku di Node.js di sini .
sumber
Kesalahan terjadi ketika Heroku gagal mengikat port atau nama host di
server.listen(port, [host], [backlog], [callback])
.Yang dibutuhkan oleh Heroku adalah
.listen(process.env.PORT)
atau.listen(process.env.PORT, '0.0.0.0')
Jadi lebih umum, untuk mendukung lingkungan lain, gunakan ini:
sumber
Perlu disebutkan bahwa jika kode Anda tidak menentukan port, maka itu tidak boleh menjadi
web
proses dan mungkin harus menjadiworker
proses.Jadi, ubah Anda
Procfile
untuk membaca (dengan perintah spesifik Anda telah diisi):worker: YOUR_COMMAND
dan kemudian juga berjalan di CLI:
$ heroku scale worker=1
sumber
start
skrip dipackage.json
Saya memiliki masalah yang sama ketika menggunakan proyek yang dihasilkan angular-fullstack yeoman dan menghapus parameter IP bekerja untuk saya.
Saya mengganti kode ini
dengan
sumber
Bagi mereka yang melewati port dan host, perlu diingat bahwa Heroku tidak akan terikat
localhost
.Anda harus lulus
0.0.0.0
sebagai tuan rumah.Bahkan jika Anda menggunakan port yang benar. Kami harus melakukan penyesuaian ini:
Kemudian Anda dapat memulai server, seperti biasa:
Anda dapat melihat detail lebih lanjut di sini: https://help.heroku.com/P1AVPANS/why-is-my-node-js-app-crashing-with-an-r10-error
sumber
const port = 3000;
untukconst port = process.env.PORT || 3000;
bekerja pada herokuDalam kasus saya, saya menggunakan contoh dari https://hapijs.com/
Untuk memperbaiki masalah saya diganti
dengan
sumber
process.env.PORT
dengan benar, tetapi meninggalkan dihost
param: Anda tidak bisa :) lihat di sini: stackoverflow.com/a/34956330/626369Saya memiliki masalah yang sama dan mengubah port mendengarkan saya dari 3000 menjadi (process.env.PORT || 5000) menyelesaikan masalah !!
sumber
Dalam kasus saya, saya menggunakan Babel dengan plugin babel-plugin-transform-inline-environment-variable . Rupanya, Heroku tidak mengatur variabel PORT env saat melakukan penempatan, jadi
process.env.PORT
akan digantikan olehundefined
, dan kode Anda akan mundur ke port pengembangan yang Heroku tidak tahu apa-apa tentang.sumber
Langkah-langkah di bawah ini menyelesaikan solusi saya:
Mengedit package.json sebagai:
dan Server.js sebagai:
sumber
package.json
. Saya percaya memperbarui itu juga harus menyelesaikan masalah ini.Saya memiliki masalah yang sama karena saya tidak mendefinisikan Procfile. Mengkomit file teks ke direktori root aplikasi Anda yang bernama Procfile tanpa ekstensi file. File ini memberi tahu Heroku perintah mana yang harus dijalankan untuk memulai aplikasi Anda.
web: node app.js
sumber
Saya memiliki masalah yang sama yang dapat saya atasi dengan mengganti 'localhost' dengan IP yaitu '0.0.0.0'
sumber
Nomor tetap tidak dapat diatur untuk port, heroku menugaskannya menggunakan secara dinamis
process.env.PORT
. Tetapi Anda dapat menambahkan keduanya, seperti iniprocess.env.PORT || 5000
. Heroku akan menggunakan yang pertama, dan localhost Anda akan menggunakan yang kedua.Anda bahkan dapat menambahkan fungsi panggilan balik Anda. Lihatlah kode di bawah ini
sumber
Dari semua solusi yang saya coba tidak ada yang bekerja seperti yang diharapkan, saya mempelajari heroku secara default File .env harus memelihara PORT konvensi, process.env.PORT, heroku secara default akan mencari PORT Kata Kunci.
Batalkan pengubahan nama seperti APP_PORT = alih-alih gunakan PORT = dalam file env Anda.
sumber
Dari proses bash heroku, turunkan nilai $ PORT ke aplikasi node Anda menggunakan parser opsi seperti yargs.
Berikut adalah contoh bagaimana Anda bisa melakukan itu. Pada objek skrip, di dalam package.json, tambahkan metode mulai "node server --port $ PORT".
Di file server Anda, gunakan yargs untuk mendapatkan nilai dari opsi port (--port $ PORT) dari metode awal:
Sekarang ketika aplikasi Anda mulai, itu akan mengikat ke nilai yang ditetapkan secara dinamis $ PORT.
sumber
Jika, seperti saya, Anda mengonfigurasi Heroku untuk menjalankan skrip dari
package.json
file Anda saat digunakan, pastikan Anda belum mengkodekan nilaiPORT
dalam skrip itu! Jika ya, Anda akan berakhir seperti saya dan menghabiskan satu jam mencoba mencari tahu mengapa Anda mendapatkan kesalahan ini.sumber
Saya memiliki masalah yang sama tetapi dengan express dan apollo-server. Solusi dari sini :
sumber
Dalam kasus saya, saya memiliki dua masalah ...
1) tidak ada pendengar sama sekali karena menjalankan aplikasi dari file entri lain dan skrip run ini dihapus dari package.json "skrip"
2) Masalah sensitif huruf dengan 'Sekuel' dan bukan 'sekuel'
sumber
Saya memiliki masalah yang sama. Akhirnya, saya menyadari bahwa saya tidak memerlukan nomor port di titik akhir permintaan. (jadi titik akhirnya adalah https: //...herokuapp.com dan bukan https: //...herokuapp.com: 5000 ).
Panggilan Listen () bisa tanpa host dan callback: server.listen (5000);
sumber
Dalam kasus saya, baik port maupun host adalah masalahnya. Index.js kami dibagi menjadi 2 file server.js
dari package.json kami menjalankan node app.js
Rupanya itulah masalahnya. Setelah saya menggabungkan keduanya menjadi satu file aplikasi heroku dikerahkan seperti yang diharapkan.
Semoga ini bisa membantu seseorang karena saya tidak menemukan orang yang mengalami masalah ini
sumber
Saya Menggunakan ReactJs, Jika Anda ingin mengunggah ke heroku, tambahkan ini di webpack.config.js Anda
Karena jika tidak menambahkan Anda akan mengalami kesalahan
sumber
Kredit untuk: gprasant
Saya hanya ingin memposting ulang karena jawaban ini memperbaiki masalah saya. Masalah saya adalah bahwa ketika melakukan penyebaran ke heroku saya mendapat kesalahan "Proses web gagal untuk mengikat $ PORT dalam 60 detik peluncuran" ketika menjalankan "heroku log --tail" di terminal. TAPI aplikasi akan berjalan seperti yang diharapkan ketika saya menjalankan server secara lokal.
Saya punya ini di file index.js saya (file server)
Tetapi seharusnya memiliki ini
Gunakan process.env.PORT bukan process.env.port !!!! port! = PORT !!! (jelas)
Kredit untuk: gprasant
sumber