DrupalでのIISの問題-更新マネージャー:更新に失敗しました!ディレクトリはphp-cgi.exeによってロックされています


9

GUIで「アップデートマネージャ」を使用するときに問題が発生します。一部のディレクトリはによってロックされるphp-cgi.exeため、元のディレクトリを新しくダウンロードしたディレクトリ(新しい)で置き換えることはできません。
しかし、許可の問題ではないことに言及する必要があります。これは、モジュールが上の「URLからインストール」を介してインストールされ/admin/modules/install、問題なく動作するためです。

例を見てみましょう:

  1. 利用可能な更新ページ(/admin/reports/updates/update):

    利用可能なアップデート

    次に、選択する(またはその他の)モジュールをチェックして更新します(どのモジュールを選択するかは関係ありません。結果は同じです!!したがって、例にすぎません)。

  2. 私はヒット「これらの更新プログラムをダウンロードする」ボタンを押します。

  3. OK、モジュールの更新されたインスタンスは問題なくダウンロードされます:
    更新が正常にダウンロードされました」: アップデートが正常にダウンロードされました
  4. 次に、[ 続行 ]をクリックします。
  5. ここでエラーが発生します。結果:
    更新に失敗しました。詳細については、以下のログを参照してください
    。select_or_other
    • インストール/更新エラー
    • ファイル転送は、その理由を失敗しました:コピーできませんD:/Projects/web/drupal-7/tmp/update-extraction-6d8993ac/select_or_other/LICENSE.txt/Projects/web/drupal-7/htdocs/sites/all/modules/select_or_other/LICENSE.txt更新失敗!
  6. はい、考えられる理由を調べようとしています。
    • Drupalのディレクトリ構造は次のようになりますTCディレクトリ構造../tmp一時ディレクトリ(/admin/config/media/file-system)に設定すると、Drupalファイルはにありhtdocsます。上記で述べたように、GUI経由でモジュールをインストールできるため、これは正しいです。
    • htdocs/sites/all/modules/select_or_otherディレクトリにアクセス......sites/all/modules/select_or_otherしようとすると、「ファイルへのアクセスが拒否されました!」というメッセージが表示されるため、アクセスできません総司令官で開いたとき、および...sites/all/modules/select_or_otherアクセスできませんアクセスが拒否されました。」ときに、Windowsエクスプローラで開きます: Total Commanderでディレクトリを開こうとしていますWindowsエクスプローラでディレクトリを開こうとしています
    • OK、フォルダを右クリックして、コンテキストメニューのアシスタントからUnlockerを開きます。それはこのディレクトリがロックされていると言い ますphp-cgi.exeUnlocker-php-cgi.exeによってロックされたディレクトリ「すべてをロック解除」をクリックすると、フォルダはそれ自体を削除できます(によってロックされなくなったphp-cgi.exeため)。
    • 更新されたselect_or_otherモジュールのディレクトリはtmp次の場所にあります: <code> tmp </ code>内の更新されたモジュールのディレクトリ
    • 手動でsites/all/modulesディレクトリに移動する必要があります。

によるディレクトリのロックアップの考えられる理由は何php-cgi.exeですか?(たぶん、Webプラットフォームインストーラーを介してインストールされたPHP 5.3用のWindowsキャッシュ拡張1.1ですか?そうであれば、たとえば、GUIを介した画像の削除などが正しく機能しているのはなぜですか?)この問題を回避するには、どうすればよいですか。
マネージャー」の仕事?


IIS7 / 2008R2のDrupal 7.15でもまったく同じ動作が見られます。これを修正するのは素晴らしいことです。
ニック

@ニック:同意する!:)
Sk8erPeter 2012

私はこれを断続的に見ました。好奇心から、アプリプールを更新するとロックも解除されますか?
ブレント

2
私はそれがトピックから外れていることを知っていますが、私はそれを言わなければなりません-IISでDrupalから逃げる。スクリーンショットでわかるように、ローカル開発に使用している可能性があります。WAMPまたはAcquia Dev Desktopを確認してください。本番サーバーで単に使用する必要がある場合は、私のコメントを無視してください:)特定のサイトではIISを使用する必要があり、これまでのところ、これは良い経験ではありません。
アラムボヤヤン2012

@ブレント:わかりません。Drupalでページを実行した後、ファイルとディレクトリが不明な期間ロックされているようです。ちなみに、私が使用していDrushを過ぎて、私は使用してモジュールを更新したいときdrush up -y、私は同じ問題が発生します。私は、これらのファイルやディレクトリのロックを解除する必要がUnlockerはそうでない場合、私は、エラーメッセージ、これらを取得し、それを動作させるためにディレクトリは書き込み/削除できず、更新プロセスが中断されます。このプロセスを実行する前にUnlockerを使用すると、更新は成功します。
Sk8erPeter 2012

回答:


1

これは安全ではなく、ftpを使用する代わりに、モジュールを更新するためにDrupalユーザーインターフェイスからファイルを書き込むことができます。

必要に応じて、ホスティングのpleskパネルに移動し、httpdocsディレクトリを右クリックして、権限をクリックして、アプリケーションプールユーザーに書き込み権限を付与します。

ありがとう


0

php-cgiがロックを保持する理由は、ウィンドウがファイルアクセスを処理する「特定の」方法と、php / iisが「キャッシュ」を処理するためです。基本的には、ディレクトリを作成してアクセスしようとしたが、それを作成したハンドルが解放されなかった(そのため、まだロックされていた)。これはdrupalの問題ではなく、IIS / PHPの問題です。また、私が見つけた既知の回避策はありません。

基本的に、IISを使用しないという基本的なアドバイスを行うのが最善です。この問題は、IISの単なる問題ではなく、Apache HTTPD(Win32)に移行することで解決しました。私がWindows 2000を使用する必要があったプロジェクトで、学校に戻ったことを覚えておいてください。

私がWindowsでdrupalを実行することを知る最良の方法は、Apacheを使用することです(phpの内部処理のため)。


0

正しい方向に掘るためのいくつかのアイデア:

Drushで同じ問題が発生している場合、これがIISの問題かどうかはわかりません。DrushはIISなしでコマンドラインからPHPを実行するだけではありませんか?IISを停止して(iisreset / stop)、Drush updateコマンドを実行することでこれを試すことができ、同じ結果が得られると思います。

その他(申し訳ありませんが、ローリの答えに直接コメントするのに十分な評判がありません):

「基本的にディレクトリを作成してアクセスしようとしたが、作成したハンドルが解放されなかった」

これは本当ですか?元の投稿から、彼は「tmp」にフォルダを作成したように見えますが、ロックは「httpdocs」の既存のフォルダにあります。

私の推測では、php-cgiはtmpからhttpdocsへのコピーを試み、何らかの理由で失敗し、ロックを解除しません。失敗後に調査すると、httpdocsがロックされていますが、失敗の最初の理由はロックではないと思います。結局、それはtmpフォルダーの権限の問題かもしれません。


それが「手動」で移動できない場合も、アップグレードプロセスの一環としてディレクトリが作成されます。IISは、奇妙なエラーを引き起こすことで知られているCGIインターフェイスを介して関与しています。報告されたエラーは「アクセスできません」ではなく「コピーできません」エラーです。
LvB、2015年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.