2

公平警告;我什至不知道Ruby。我只是将我收到的一些脚本拼凑在一起,并希望它们能一起工作。

背景

作为 svn 管理员,我正在使用 Ruby 自动执行多项任务,而我尝试执行的任务之一是制作一个可以自动创建存储库的 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 脚本停止执行(并且不会echo在代码中的特定点打印我可以在 PHP 中的错误消息。

我调用脚本如下:

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

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

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

@@aclfile是绝对路径,而不是相对路径,所以我认为这不是问题所在。

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

我究竟做错了什么?

谢谢!

4

1 回答 1

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 用户的权限或更改目标目录的权限。你必须自己打电话。

于 2013-02-25T01:35:23.080 回答