我在服务器上的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的dev分支]进行部署。
为什么process.env.PWD不再正确引用我项目的正确根目录?该问题是否与mup [x] / Meteor构建脚本有关,以创建Meteor应用程序的生产版本?
答案 0 :(得分:0)
我找不到如何做到这一点/也许没有Meteor方法来做到这一点。所以我目前的解决方案是检查生产/开发并为前缀设置变量:
if (process.env.NODE_ENV === 'development') {
prefix = process.env.PWD + '/public';
} else {
prefix = '/bundle/bundle/programs/web.browser/app';
}
此前缀变量可将您带到/ public
答案 1 :(得分:0)
默认情况下,公共目录通常位于类似于./programs/web.browser/app/的Mup应用程序中。
我认为私人目录位于./programs/server/assets/app /.
因此,使用服务器端文件结构 - (显然这是在基于服务器的方法 - 如Meteor.methods上运行)和私有文件(将您的字体放在/private/fontfile.xss')。 p>
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;
这应该适用于服务器和本地操作。
答案 2 :(得分:0)
解决这个问题:
Meteor.startup(function() {
routePath = fs.realpathSync('./../../../../../public');
})
但我使用public
代替.uploads
。在公共旁边的项目级别创建.uploads
。优势在于您的Meteor应用程序每次都不会监视.uploads以进行更改。