2

サーバー上のMeteorプロジェクトにこのコードがあります。フォント ファイルを PDF 生成パッケージに読み込みます。

doc.font(process.env.PWD + '/public/[...]');

これは私のローカル マシンでは問題なく動作しますが、デプロイ時に次のエラーがログに記録されます。

Error: ENOENT, no such file or directory '/bundle/bundle/public/[...]'

PDF パッケージは fs.readFileSync を使用してこのファイルを読み取ろうとしています。

mupx [Docker を使用する Meteor Up の開発ブランチ] を使用してデプロイしています。

process.env.PWD がプロジェクトの正しいルートを正しく参照しなくなったのはなぜですか? この問題は、mup[x]/Meteor が Meteor アプリの製品版を作成するために行うビルド スクリプトに関連していますか?

4

3 に答える 3

1

これを行う方法が見つかりません/おそらくこれを行うMeteorの方法はまだありません. したがって、私の現在の解決策は、生産/開発を確認し、プレフィックスの変数を設定することです:

if (process.env.NODE_ENV === 'development') {
  prefix = process.env.PWD + '/public';
} else {
  prefix = '/bundle/bundle/programs/web.browser/app';
}

このプレフィックス変数は /public にアクセスします

于 2015-07-10T00:46:47.773 に答える
0

デフォルトでは、パブリック ディレクトリは通常、Mup アプリの ./programs/web.browser/app/ に似た場所にあります。

プライベート ディレクトリは ./programs/server/assets/app/ にあると思います。

そのため、サーバー側のファイル構造 (明らかに、これは Meteor.methods などのサーバー ベースのメソッドで実行されます) とプライベート ファイル (フォントを /private/fontfile.xss に置きます) を使用します。

var font_file_name = 'fontfile.xxx';
var server_root = Npm.require('fs').realpathSync( process.cwd() );
var font_path = server_root + '/assets/app/' + font_file_name;

これは、サーバーとローカル操作の両方で機能するはずです。

于 2015-07-10T03:53:30.550 に答える