在heroku主机上由nodejs运行控制台php脚本

时间:2014-09-23 13:17:17

标签: php node.js heroku

我在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

2 个答案:

答案 0 :(得分:2)

我自己解决了这个问题。 https://github.com/vodolaz095/nodejs-php-heroku-example

我已经构建了PHP二进制文件,而不是将它包含在nodejs项目中并推送到服务器。 它正在运行。

我并不暗示,这是唯一且最好的解决方案,但它完全符合我的要求

所以,我已经发布了一个例子,我该怎么做呢

答案 1 :(得分:0)

在您无法控制的服务器上没有php二进制文件,您无法安装它,因此您的代码无法正常工作,您可以选择:

  • 离开heroku,在您的服务器上安装node.js和php,并使用此代码(如果您有服务器)
  • 让你的php恢复,在另一台服务器上启动,并以另一种形式获得结果(如果你有服务器和时间)
  • 以heroku支持的格式重写您的php脚本(如果您有时间)

没有别的选择,每个都有缺点,但除非你有很多钱,否则我怀疑heroku会愿意为你的服务器安装php。