用PHP调用Ruby脚本

时间:2013-02-25 01:09:55

标签: php ruby

公平警告;我甚至都不认识Ruby。我只是在一起攻击我给出的一些脚本,并希望它们能够一起工作。

背景

我正在使用Ruby作为svn管理员自动执行多项任务,而我正在尝试实现的任务之一是创建一个可自动创建存储库的Web表单。

我正在运行的脚本总共约100-200行,包括包含等等。我确信代码会有其他问题,但是现在,它遇到了一个问题。

Ruby脚本本身有效。我的问题是,当我尝试从不同目录中的PHP脚本调用它时,它不起作用。

目录结构如下:

Home
    .www-docs
        makeRepo.php
    svn
        createNewRepo.php
        migrateOne.php // This has yet to cause a problem
        RepoUtils.rb // Not currently causing a problem

问题

我遇到的确切问题是Ruby脚本停止执行(并且不会在代码中的特定点打印PHP中echo的错误消息。

我正在调用脚本如下:

chdir("../svn");
echo exec("ruby createNewRepo.rb $name1 $name2 $num")

所以,它肯定会调用脚本。我在整个脚本中放置了打印点,所以我知道它停在这里:

print "Point 1"
acl = File.new(@@aclfile, "a")
print "Point 2"

@@aclfile是绝对的道路,而不是相对的道路,所以我认为不是唯一的问题。

上面的代码最终会打印Point 1(之后也没有任何内容)。

我做错了什么?

谢谢!

1 个答案:

答案 0 :(得分:3)

如果它在您手动运行时有效,而不是通过PHP脚本运行,我认为您有权限问题。如果Web进程正在运行的用户无权访问绝对路径(或路径不存在),则会出现错误:

$ irb
1.8.7 :001 > File.new("/this/doesn't/exist", "a")
Errno::ENOENT: No such file or directory - /this/doesn't/exist
    from (irb):1:in `initialize'
    from (irb):1:in `new'
    from (irb):1
1.8.7 :002 > File.new("/etc/passwd", "a")
Errno::EACCES: Permission denied - /etc/passwd
    from (irb):2:in `initialize'
    from (irb):2:in `new'
    from (irb):2
1.8.7 :003 > 

检查目标目录的权限,并确定Web用户是否可以访问它。出于安全原因,我不会告诉您更改Web用户的权限或更改目标目录的权限。你必须自己打电话。