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 回答
0

以这种方式解决它:

Meteor.startup(function() {
  routePath = fs.realpathSync('./../../../../../public');
})

public我没有使用.uploads. .uploads在公共旁边的项目级别上创建。优点是您的 Meteor 应用程序不会每次都查看 .uploads 的更改。

于 2016-04-03T17:13:52.237 回答