我在heroku上运行了一个nodejs应用程序。 我必须在其中运行控制台PHP脚本。 我想通过子进程执行脚本 - http://nodejs.org/api/child_process.html。
我的问题是 - 如何在heroku托管中启用nodejs和php解释器?
这是我的应用程序的index.js文件(简化)
var http = require('http'),
exec = require('child_process').exec;
http.createServer(function (req, res) {
exec('php script.php',
function (error, stdout, stderr) {
if(error){
throw error;
} else {
res.writeHead(200, {'Content-Type': 'text/plain'});
res.end(stdout);
}
});
}).listen(process.env.PORT || 3000);
这是script.php文件
<?php
echo "Hello, world!";
当我尝试启动我的应用程序时,我在日志中有这个响应
Sep 23 06:44:48 blooming-woodland-9158 app/web.1: Error: Command failed: /bin/sh: php: not found
Sep 23 06:44:48 blooming-woodland-9158 app/web.1: at ChildProcess.exithandler (child_process.js:648:15)
Sep 23 06:44:48 blooming-woodland-9158 app/web.1: at ChildProcess.emit (events.js:98:17)
Sep 23 06:44:48 blooming-woodland-9158 app/web.1: at maybeClose (child_process.js:756:16)
Sep 23 06:44:48 blooming-woodland-9158 app/web.1: at Socket.<anonymous> (child_process.js:969:11)
Sep 23 06:44:48 blooming-woodland-9158 app/web.1: at Socket.emit (events.js:95:17)
Sep 23 06:44:48 blooming-woodland-9158 app/web.1: at Pipe.close (net.js:465:12)
所以它看起来没有安装PHP二进制文件
UPD:他们有php的buildpack https://github.com/heroku/heroku-buildpack-php 我将尝试使用它并在此处分享结果
UPD1:buildpack不允许为它启动nodejs 我决定构建像这里描述的php二进制文件并将其与我的项目一起发送 - 可能我可以构建PHP二进制文件并将其与我的项目一起发送 - Compile PHP into Static Binary
答案 0 :(得分:2)
我自己解决了这个问题。 https://github.com/vodolaz095/nodejs-php-heroku-example
我已经构建了PHP二进制文件,而不是将它包含在nodejs项目中并推送到服务器。 它正在运行。
我并不暗示,这是唯一且最好的解决方案,但它完全符合我的要求
所以,我已经发布了一个例子,我该怎么做呢
答案 1 :(得分:0)
在您无法控制的服务器上没有php二进制文件,您无法安装它,因此您的代码无法正常工作,您可以选择:
没有别的选择,每个都有缺点,但除非你有很多钱,否则我怀疑heroku会愿意为你的服务器安装php。