2013-02-25 90 views
2

公平警告;我甚至不知道Ruby。我只是一起剽竊我給予的一些腳本,並希望他們能夠一起工作。用PHP調用Ruby腳本

背景

我使用Ruby來自動進行一些任務,如一個SVN管理員,和我試圖想達到的任務是製作一個網頁形式,將自動創建一個的存儲庫。

我正在運行的腳本總計大約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

'chdir('svn')'是可疑的。如果這是你真正的代碼,那應該是'chdir('../ svn')'。 – 2013-02-25 01:12:33

+1

這很可能是一個權限問題。運行在哪個用戶的Web服務器?該用戶將被用於運行Ruby腳本。如果該用戶無權訪問您嘗試訪問的文件或目錄,則Ruby將退出,並顯示stderror異常,這在PHP中不可見。 – Casper 2013-02-25 01:34:42

+0

@MichaelBerkowski呃,對不起,錯字。 :) – 2013-02-25 01:38:30

回答

3

如果它在你手動運行但不通過PHP腳本時正常工作,我認爲你有權限問題。如果網絡進程正在運行的用戶無權訪問的絕對路徑(或路徑不存在),你會打一個錯誤:

$ 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用戶的權限或更改目標目錄的權限。你必須自己打電話。