Grunt buildcontrolを使用して、herokuに継承したプロジェクトを初めてデプロイしようとしています。ビルドしてデプロイすることはできますが、実行するとエラーが発生します。
ENOENT:そのようなファイルまたはディレクトリはありません。「ssl/keys /server.key」を開きます。
Distディレクトリを確認すると、実際にはsslディレクトリはありません。したがって、私はそれを/ distに追加しましたが無駄になりました。/dist/server /内のapp.jsがそのディレクトリにスコープされている可能性があると考えて、そこにsslディレクトリをコピーしました。これも同じ問題です。 /dist/server/app.jsの内部:
var options = {
key: fs.readFileSync('ssl/keys/server.key'),
cert: fs.readFileSync('ssl/keys/server.crt')
};
// Setup server
var app = express();
var server = require('https').createServer(options, app);
サーバーフォルダ内にない場合、どこでsslディレクトリを検索しますか?
readFileSync
関数 現在の作業ディレクトリへの相対パスを評価します ノード実行可能ファイルの==。Herokuでは_/app
_であり、distフォルダーではありません。 distフォルダーに相対パスとしてアクセスするには、 _path.resolve
_ を使用する必要があります。
_var path = require('path');
var options = {
key: fs.readFileSync(path.resolve('dist/ssl/keys/server.key')),
cert: fs.readFileSync(path.resolve('dist/ssl/keys/server.crt'))
};
_
代替案は次のとおりです。
fs.readFileSync(__dirName + '/dist/ssl/keys/server.key')
fs.readFileSync(process.cwd() + '/dist/ssl/keys/server.key')
fs.readFileSync(path.join(__dirName, 'dist', 'ssl', 'keys', 'server.key'))
しかし、_path.resolve
_は簡潔で堅牢なものの正しいブレンドだと思います。
/ ssl/keysがあるdistフォルダーの横にapp.jsがある場合は、「__ dirname」変数を使用してアプリのディレクトリパスにアクセスできます。次のようになります。
var options = {
key: fs.readFileSync(__dirname + '/dist/ssl/keys/server.key'),
cert: fs.readFileSync(__dirname + '/dist/ssl/keys/server.crt')
};
// Setup server
var app = express();
var server = require('https').createServer(options, app);
/ dist/server /内のapp.jsがそのディレクトリにスコープされている可能性があると考えて、そこにsslディレクトリをコピーしました。
__dirname
をapp.js
にログインすると、/dist/server
が取得されます。
ssl
ディレクトリを/dist/server
に保存しました。
したがって、key
パスは/dist/server/ssl/keys/server.key
であり、cert
パスは/dist/server/ssl/keys/server.crt
です。
コードは次のようになります。
var options = {
key: fs.readFileSync(__dirname + '/ssl/keys/server.key'),
cert: fs.readFileSync(__dirname + '/ssl/keys/server.crt')
};
ssl
ディレクトリを/dist
に保存する場合:
key
パスは/dist/ssl/keys/server.key
であり、cert
パスは/dist/ssl/keys/server.crt
です。
これで、コードは次のようになります。
var options = {
key: fs.readFileSync(__dirname + '/../ssl/keys/server.key'),
cert: fs.readFileSync(__dirname + '/../ssl/keys/server.crt')
};
私は自分のプロジェクトの1つで同じものを使用していますが、path.resolve
またはpath.join
を使用しなくても正常に動作します。 ../
親ディレクトリ表現でさえ、fs.readFileSync
自体によって解決されます。
ReadFileSync関数には相対パスが必要なので、パスモジュールを使用してキーの相対パスを取得できます。
var path = require('path');
var options = {
key: fs.readFileSync(path.join(path.resolve('.'), '/ssl/keys/server.key')),
cert: fs.readFileSync(path.join(path.resolve('.'), '/ssl/keys/server.crt'))
};