2

公正警告; ルビーもよくわからない。与えられたいくつかのスクリプトをハッキングして、それらが連携して動作することを望んでいます。

バックグラウンド

Ruby を使用して、svn 管理者としていくつかのタスクを自動化しています。実行しようとしているタスクの 1 つは、リポジトリの作成を自動化する Web フォームを作成することです。

私が実行しているスクリプトは、インクルードなどを含めて合計で約 100 ~ 200 行です。コードには他にも問題があると思いますが、現在、1 つの問題が発生しています。

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 に答える