我目前正在制作Meteor应用,但无法从private
子目录中读取文件。我一直在关注几个不同的教程,并设法让我在本地运行流星应用程序时完美无瑕地工作。这个问题(Find absolute base path of the project directory)帮助我提出使用process.env.PWD
访问根目录,然后我使用.join()
访问private
文件夹及其中的相关文件。但是,当我部署此代码时,网站在启动时崩溃。我非常有信心这是process.env.PWD
的问题,所以我想知道在已部署的应用上获取Meteor的根目录的正确方法是什么。
//code to run on server at startup
var path = Npm.require('path')
//I also tried using the below line (which was recommended in another Stackoverflow question) to no avail
//var meteor_root = Npm.require('fs').realpathSync( process.cwd() + '/../' );
var apnagent = Meteor.require("apnagent"),
agent = new apnagent.Agent();
agent.set('cert file', path.join(process.env.PWD, "private", "certificate-file.pem"))
agent.set('key file', path.join(process.env.PWD, "private", "devkey-file.pem"))
答案 0 :(得分:3)
在开发模式下,文件结构与捆绑后不同,因此您不应该依赖它。特别是,您应该不直接访问您的文件,就像您使用path
方法一样。
Meteor的文档in this section描述了加载私有资产。它主要归结为这种方法:
Assets.getBinary("certificate-file.pem");
和它的getText
对手。
关于配置APN代理,请参阅文档的this section。您不必通过将文件路径作为cert file
参数传递来配置代理。相反,您可以将Assets
方法返回的原始数据直接传递为cert
。同样适用于key file
〜key
对和其他设置。
作为替代方案,您需要将文件独立提交到生产服务器,并将其提交到与Meteor应用程序不同的文件夹并使用其全局路径。但是,对于像Heroku这样的云提供商来说,这是不可能的,因此以预期的方式使用资产会更好。