process.env.PWD 不适用于 mupx 部署
process.env.PWD doesn't work on mupx deploy
我在服务器上的 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 应用程序的生产版本所做的构建脚本有关?
我找不到如何做到这一点/也许还没有 Meteor 方法来做到这一点。所以我目前的解决方案是检查 production/development 并为前缀设置一个变量:
if (process.env.NODE_ENV === 'development') {
prefix = process.env.PWD + '/public';
} else {
prefix = '/bundle/bundle/programs/web.browser/app';
}
这个前缀变量让你到达 /public
默认情况下,对于 Mup 应用程序,public 目录通常位于类似于 ./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;
这应该适用于两台服务器和您的本地操作。
这样解决了:
Meteor.startup(function() {
routePath = fs.realpathSync('./../../../../../public');
})
但我用的是 .uploads
而不是 public
。在 public 旁边的项目级别创建 .uploads
。优点是您的 Meteor 应用程序不会每次都监视 .uploads 的变化。
我在服务器上的 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 应用程序的生产版本所做的构建脚本有关?
我找不到如何做到这一点/也许还没有 Meteor 方法来做到这一点。所以我目前的解决方案是检查 production/development 并为前缀设置一个变量:
if (process.env.NODE_ENV === 'development') {
prefix = process.env.PWD + '/public';
} else {
prefix = '/bundle/bundle/programs/web.browser/app';
}
这个前缀变量让你到达 /public
默认情况下,对于 Mup 应用程序,public 目录通常位于类似于 ./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;
这应该适用于两台服务器和您的本地操作。
这样解决了:
Meteor.startup(function() {
routePath = fs.realpathSync('./../../../../../public');
})
但我用的是 .uploads
而不是 public
。在 public 旁边的项目级别创建 .uploads
。优点是您的 Meteor 应用程序不会每次都监视 .uploads 的变化。