我有一个Node.js应用程序,我编写并通过Bash成功部署到Heroku应用程序。从我在家里运行Ubuntu的电脑上运行也很好。
但是,我刚刚将存储库克隆到Windows计算机上,而且我已经成功地将更新推送到Heroku远程服务器,只要我从Windows运行heroku local
并尝试访问本地版本(localhost:5000),该页面出错,我的命令行返回TypeError: Request path contains unescaped characters
和layer.js:95.5
。
该应用使用https.get
,这似乎是本地的问题行。
我不愿意尝试调整我的代码,因为它在Heroku本身上工作正常并且在我的Ubuntu机器上工作正常 - 所以只能假设需要在我的Windows机器上进行配置。
知道问题可能是什么?
答案 0 :(得分:1)
请注意您在Heroku中为config / .env
选择的变量键。 Windows有一些保留密钥(如user
和path
),这意味着尝试根据这些密钥设置自己的值将无效。
事实证明问题在于我选择的.env
文件中使用的变量名称。
如果您有不想提交到存储库的数据(在我的情况下,是我的帐户的身份验证密钥和详细信息),您可以将它们添加到Heroku中作为“config vars” - key=value
Heroku与您的代码分开的对,以便您可以根据需要对版本进行版本化和共享,其他人可以添加自己的详细信息。
当使用工具带中的heroku local
命令在本地运行Heroku时,这些变量需要来自其他地方。 Heroku的帮助建议在名为key=value
的文件中将其设置为.env
对(然后您可以将其添加到.gitignore
以防止意外提交。
不幸的是,在我的情况下,.env
中我选择的变量键导致了问题。我已经创建了名为user
和path
的变量的依赖项,但这些似乎是在Windows上保留的并且有特殊用途,因此无法被我.env
文件中的内容覆盖。这就是为什么在我的Ubuntu机器上工作的东西不能直接在Windows上运行。
您可以通过从Windows计算机上的Node调用console.log(process.env.user
,process.env.path
)来查看此操作。
现在我已将变量名称更改为非保留heroku local
的工作正常。通过node
命令调用该程序仍然无法正常工作,因为它未设置为从.env
获取变量作为Heroku。
希望这有助于其他人。