我怎么能用Heroku模拟一个离线目录?

时间:2013-12-30 13:26:34

标签: php perl heroku

我以前在我的服务器上有一个使用Perl脚本的脱机目录来动态创建文件。

出于安全原因(/server/back/scripts)说这个目录位于脱机目录中我以前用exec(/server/back/scripts/auto.pl $arguments

访问它

auto.pl的内容:

system('cp /server/back/includes/default /server/front/ann/'.$enc.'.php');
system('chmod 555 /server/front/ann/'.$enc.'.php');
system("perl -pi -e 's/string/".$key."/g' /server/front/ann/".$enc.".php");

此脚本将带有垃圾值的默认文件复制粘贴到公共目录,并在设置我们想要的权限时将垃圾值替换为其他值。

如何在Heroku上重现这一点? - 如果不可能,有没有办法至少重现这个脚本的行为?

2 个答案:

答案 0 :(得分:3)

看起来这个脚本的目标是通过搜索/替换将密钥/凭证注入PHP应用程序。

Heroku鼓励通过环境变量进行配置,尤其是密钥/凭证。

您应该通过Heroku命令行工具添加密钥:

heroku config:set MY_API_KEY=super-secret-hex-goes-here

...然后在PHP代码中从dyno的环境中提取值:

$api_key = getenv('MY_API_KEY');

这将允许您为Heroku上的每个正在运行的应用程序设置密钥/机密,而无需在源代码中存储任何内容。

答案 1 :(得分:2)

Heroku 不会公开当前网络dyno的文件系统。因此,您无法对文件进行任何更改以对正在运行的服务器产生影响。

如果您拥有代码库中的文件,则可以更改文件。因此,您可以提交更改并在Heroku上部署。

如果您所谈论的这些变量必须在系统范围内使用,那么最好的方法是使用Winfield答案中提到的环境变量

您可以使用命令 设置和取消设置环境变量

  

heroku config:设置VAR_NAME =值[VAR_NAME_2 =值.........]

     

heroku配置:取消设置VAR_NAME [VAR_NAME2 .......]

如果您需要维护具有环境变量当前值的文件,则可以使用此命令:

  

heroku config:pull --overwrite

这将获得当前在服务器上设置的所有环境变量,并将它们存储在.env文件中。 然后你可以在本地更新.env文件中的值,并通过命令在服务器上更新相同的内容:

  

heroku config:push

这将使用.env文件中的值替换服务器上的所有当前值

在此处阅读有关environmet变量的更多信息:https://devcenter.heroku.com/articles/config-vars