私はこれらのテクノロジー(JavaScriptを含む)のすべてにかなり慣れているので、ここで我慢する必要があるかもしれません。
私はSocket.IOのドキュメントでChatAppチュートリアルをかなり詳しく調べ、アプリケーションを多少変更しました。しかし、サーバーとのやり取りなどの面で大きな変化はないと思います。私の問題は私が何をしても関係なく、アプリケーションをHerokuで正常に実行させることができないようです。アプリを読み込もうとすると、次のエラーメッセージが表示されます。
アプリケーションエラーアプリケーションでエラーが発生し、ページを配信できませんでした。しばらくしてからもう一度お試しください。アプリケーションの所有者の場合は、ログで詳細を確認してください。
私は何か明白なものや何が欠けているのかわかりません。
ここに私のメインのindex.jsファイルがあります:
var express = require('express');
var app = express();
var http = require('http').Server(app);
var io = require('socket.io')(http);
app.get('/', function(req, res){
res.sendfile('index.html');
});
app.use("/css", express.static(__dirname + '/css'));
//array of users currently in chat
var people = {};
io.on('connection', function(socket){
console.log('user connected!');
socket.on('join', function(name){
people[socket.id] = name; //create entry in 'people' with new user
socket.emit("update", "You have connected to the server.");
io.sockets.emit("update", name + " has joined the server.");
io.sockets.emit("update_people_list", people);
});
socket.on('disconnect', function(){
console.log('user disconnected!');
if(people[socket.id] != ""){
io.sockets.emit("update", people[socket.id] + " has left the server.");
delete people[socket.id];
io.sockets.emit("update_people_list", people);
}
});
socket.on('chat message', function(msg){
console.log('message: ' + msg);
io.sockets.emit('chat message', people[socket.id], msg);
});
});
// http.listen(3000, function(){
// console.log('listening on *:3000');
// });
index.html
<script src="/socket.io/socket.io.js"></script>
<script src="http://code.jquery.com/jquery.js"></script>
<script>
$(document).ready(function(){
var ready = false;
var socket = io.connect();
$("#chat").hide();
$(".canvasDiv").hide();
$("#name").focus();
//prevent form from being submitted without name
$("form").submit(function(event){
event.preventDefault();
});
//allows entering by hitting 'Enter' for name
$("#name").keypress(function(e){
if(e.which == 13) { //if ENTER key
var name = $("#name").val();
if(name != ""){
socket.emit("join", name);
$("#login").detach();
$("#chat").show();
$("#msg").focus();
ready = true;
}
}
});
$('#chatform').submit(function(){ //when submit chat message
socket.emit('chat message', $('#msg').val()); //emit message + value of input
$('#msg').val(''); //empty field?
return false; //so that the page doesn't refresh
});
//SOCKET LISTENING
socket.on('chat message', function(user, msg){
if(ready){
$('#messages').append("<p><strong><span class='chat-user'>" + htmlEntities(user) + " </span></strong>: " + htmlEntities(msg) + "</p>");
//adjust height and scroll as need be:
var $container = $('#messages');
var height = $container.get(0).scrollHeight;
$container.scrollTop(height);
}
});
socket.on("update", function(io_message){
if(ready){
$('#messages').append("<p class='notification'>" + htmlEntities(io_message) + "</p>")
}
});
socket.on("update_people_list", function(people){
if(ready){
$("#people").empty(); //clear to refresh it
$.each(people, function(client_id, name){
$('#people').append("<p class='notification'>" + htmlEntities(name) + "</p>");
});
var $container = $("#messages");
var height = $container.get(0).scrollHeight;
$container.scrollTop(height);
}
});
});
</script>
さらに、私のpackage.jsonファイル
{
"name": "socket-chat-example",
"version": "0.0.1",
"description": "my first socket.io app",
"dependencies": {
"express": "^4.6.1",
"socket.io": "^1.0.6"
}
}
Procfile:
web: node index.js
.gitignore:
node_modules/
開示:私はNode Herokuのプラットフォームオーナーです
最初に、ログ出力を取得するには_heroku logs
_を実行する必要があります。
次に、サーバーでlisten
をコメント化したことを意味しますか?これがないと、サーバーは着信接続を許可しません。
// http.listen(3000, function(){ // console.log('listening on *:3000'); // });
最後に、ハードコードされたポート(3000)にバインドする代わりに、デフォルトで環境変数にバインドする必要があります。
http.listen(process.env.PORT || 3000, function(){ console.log('listening on', http.address().port); });
同じエラーが発生しましたが、"start":"node app.js"
package.jsonファイル内で問題を修正する傾向があります。これが同じエラーに遭遇した人を助けることを願っています。
注: app.jsは、独自のメインサーバーファイルにする必要があります。
heroku logs
を確認した後、bcryptの依存関係がpackage.jsonで適切に定義されていることがわかりました。私はあなたをお勧めします:
npm install
を実行しますgit Push heroku
Nodeアプリを数週間使用しなかった後にもこのエラーが発生しました。その理由は、アプリがスリープ状態になっただけでなく、データベースとその接続もスリープ状態になったためです。私はm MongoLabがホストする無料のMongoDBインスタンスを使用します。
アプリのローカルコピーを実行してこれを修正し、MongoLabを呼び起こしました。それから数分後、Herokuでホストされているアプリが再び機能し始めました。
すべての依存関係を確認してください。 package.jsonをクロスチェックして確認するか、package.json内のすべての依存関係の更新インストールを行うことができます