/opt/battleshipの下にserver.jsで始まるNodeJSプロジェクトがあります。そのディレクトリに移動してノードサーバーをタイプするとすべて正常に動作しますが、/ rootに座って絶対パスを使用して起動すると、node /opt/battleship/server
など、./libと./publicのサブディレクトリ404応答を取得します。これは生産の問題であり、私の/etc/init/battleship.confスクリプトが絶対パスのNodeJSをサービスとして実行するためのより洗練された方法を探してください
exec /usr/local/bin/node /opt/battleship/server.js >> /var/log/battleship.log 2>&1
でブート時にプロセスを開始する指定しているのでそれは動作しますが、その後、私は404エラーが発生します。私は
cd /opt/battleship
だけbattleship.confファイルでその上にラインを入れた場合は.confファイル内のCDを使用しているかのように、私は私が正しく私のすべてのファイルを取得し、404エラーを得ることはありませんが、それはそうです厄介でエラーを起こしやすい私が間違っている場合は私を修正してください。これは私の手書きの.confファイルです。 ./libと./publicのサブディレクトリから正しくserver.jsサーバーにファイルをアップロードする方法がありますか?以下は、参照のための私のserver.jsファイルです:
var PORT = 3000;
var requirejs = require('requirejs');
var http = requirejs('http');
var fs = requirejs('fs');
var path = requirejs('path');
var mime = requirejs('mime');
var cache = {};
requirejs.config({
baseUrl: __dirname,
nodeRequire: require,
packages: [
{name: 'ship', location: 'public/js/lib/ship'},
{name: 'GameState', location: 'public/js/lib', main: 'GameState'}
]
});
requirejs(['./lib/battleship_server'], function(battleship_server) {
function send404(response) {
response.writeHead(404, {'Content-Type': 'text/plain'});
response.write('Error 404: response not found.');
response.end();
}
function sendFile(response, filePath, fileContents) {
response.writeHead(
200,
{'Content-Type': mime.lookup(path.basename(filePath))}
);
response.end(fileContents);
}
function serveStatic(response, cache, absPath) {
if (cache[absPath]) {
sendFile(response, absPath, cache[absPath]);
} else {
fs.exists(absPath, function(exists) {
if (exists) {
fs.readFile(absPath, function(err, data) {
if (err) {
send404(response);
} else {
cache[absPath] = data;
sendFile(response, absPath, data);
}
});
} else {
send404(response);
}
});
}
}
var server = http.createServer(function(request, response) {
var filePath = false;
if (request.url === '/') {
filePath = 'public/index.html';
} else {
filePath = 'public' + request.url;
}
var absPath = './' + filePath;
serveStatic(response, cache, absPath);
});
server.listen(PORT, function() {
console.log('Server listening on port ' + PORT + '.');
});
battleship_server(server);
});
がそれを固定こと!どうもありがとうございます! /etc/init/battleship.confファイルから 'CDの/ opt/battleship'を削除し、からserver.jsに行を変更: ' VARのABSPATH = './' + filePathに; ' へ 'var absPath = path.join(__ dirname、filePath);' 完全に動作しました。 –