process.env.PWD不适用于mupx deploy

时间:2015-07-09 00:20:22

标签: meteor deployment server meteor-up

我在服务器上的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应用程序的生产版本?

3 个答案:

答案 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以进行更改。