公平警告;我甚至都不认识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
(之后也没有任何内容)。
我做错了什么?
谢谢!
答案 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用户的权限或更改目标目录的权限。你必须自己打电话。