如何从已部署的Meteor应用程序中的子目录中读取文件?

时间:2014-04-18 20:07:44

标签: javascript path meteor directory

我目前正在制作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"))

1 个答案:

答案 0 :(得分:3)

在开发模式下,文件结构与捆绑后不同,因此您不应该依赖它。特别是,您应该直接访问您的文件,就像您使用path方法一样。

Meteor的文档in this section描述了加载私有资产。它主要归结为这种方法:

Assets.getBinary("certificate-file.pem");

和它的getText对手。

关于配置APN代理,请参阅文档的this section。您不必通过将文件路径作为cert file参数传递来配置代理。相反,您可以将Assets方法返回的原始数据直接传递为cert。同样适用于key filekey对和其他设置。

作为替代方案,您需要将文件独立提交到生产服务器,并将其提交到与Meteor应用程序不同的文件夹并使用其全局路径。但是,对于像Heroku这样的云提供商来说,这是不可能的,因此以预期的方式使用资产会更好。