単一ファイルのアップロード課題提出時に最終更新日時(学生)が更新されない問題

単一ファイルのアップロード課題提出時に最終更新日時(学生)が更新されない問題

- Seiichirou Hiraoka の投稿
返信数: 9
平岡です。 単一ファイルのアップロード課題にて問題がありますので、アドバイスを 頂けますと幸いです。 - 環境 Moodle: 1.9.11+ OS: RHEL5 DB: PostgreSQL 8.2(Moodleとは別マシン) OS: Solarais10 端末: 50 台程度(Proxyサーバ・SSLアクセラレータ経由でMoodleを利用) - 課題の作成 以下の設定で課題を作成しました。 提出期限後の課題提出を禁止する: No 課題の再提出を許可する: No 教師にメール通知する: No - 課題の提出 50 名程度の学生により、2 分間程度の間に課題の提出を行いました。 その際のサーバ負荷はほぼありませんでした。 - 問題の発生 課題提出後評価を行う際に、以下の事象が確認されました。 . ○○件の提出課題を確認するをクリック . 最終更新日時(学生)に何も書かれていない学生の「評定」をクリック . 学生の姓名の右にファイル名が表示されている 通常は、最終更新日時(学生)欄と「評定」の姓名の右側両方にファイル名 が表示されていますが、姓名の右側にしかファイル名が表示されておりません。 活動レポートのすべてのログを確認したところ、正常な学生は upload upload, assignment upload の順にログが出力されておりますが、問題があった 学生は upload upload しか出力されておりませんでした。 つまり、アップロードが成功しているにも関わらず、assignmentへの登録が 出来ていないことが考えられます。 なお、この問題は 6 名程度の学生にて発生しておりました。 - 再現試験 本事象はある先生の授業にて発生したもので、課題提出時の画面にどのような メッセージが出ていたのかわからない為、試験環境にて同様の試験を行い ましたが、問題が再現しませんでした。。 - 調査 ソースコードを参照したところ、 mod/assignment/type/uploadsingle/assignment.class.php 中の upload 関数にて、 require_once($CFG->dirroot.'/lib/uploadlib.php'); $um = new upload_manager('newfile',true,false,$this->course,false,$this->assignment->maxbytes); if ($um->process_file_uploads($dir) and confirm_sesskey()) { $newfile_name = $um->get_new_filename(); ... 辺りで何かあったかと推測していますが、そもそも再現方法がわからない為 どのように調査を進めたら良いか悩んでいる状況です。 以上のような状況ですが、どなたか同じような状況に遭遇された方はいらっしゃい ませんでしょうか。もしくは、お気づきの点はありませんでしょうか。
Seiichirou Hiraoka への返信

Re: 単一ファイルのアップロード課題提出時に最終更新日時(学生)が更新されない問題

- Seiichirou Hiraoka の投稿
申し訳ありません、HTMLフォーマット?になっており改行が含まれていませんでした。。。


平岡です。

単一ファイルのアップロード課題にて問題がありますので、アドバイスを
頂けますと幸いです。

- 環境
  Moodle: 1.9.11+
  OS: RHEL5

  DB: PostgreSQL 8.2(Moodleとは別マシン)
  OS: Solarais10

  端末: 50 台程度(Proxyサーバ・SSLアクセラレータ経由でMoodleを利用)

- 課題の作成
  以下の設定で課題を作成しました。

  提出期限後の課題提出を禁止する: No
  課題の再提出を許可する: No
  教師にメール通知する: No

- 課題の提出
  50 名程度の学生により、2 分間程度の間に課題の提出を行いました。
  その際のサーバ負荷はほぼありませんでした。

- 問題の発生
  課題提出後評価を行う際に、以下の事象が確認されました。
  . ○○件の提出課題を確認するをクリック
  . 最終更新日時(学生)に何も書かれていない学生の「評定」をクリック
  . 学生の姓名の右にファイル名が表示されている


  通常は、最終更新日時(学生)欄と「評定」の姓名の右側両方にファイル名
  が表示されていますが、姓名の右側にしかファイル名が表示されておりません。

  活動レポートのすべてのログを確認したところ、通常は upload upload,
  assignment upload の順にログが出力されておりますが、問題があった
  学生は upload upload しか出力されておりませんでした。

  つまり、アップロードが成功しているにも関わらず、assignmentへの登録が
  出来ていないことが考えられます。
  なお、この問題は 6 名程度の学生にて発生しておりました。

- 再現試験
  本事象はある先生の授業にて発生したもので、課題提出時の画面にどのような
  メッセージが出ていたのかわからない為、試験環境にて同様の試験を行い
  ましたが、問題が再現しませんでした。。

- 調査
  ソースコードを参照したところ、
    mod/assignment/type/uploadsingle/assignment.class.php
  中の upload 関数にて、

            require_once($CFG->dirroot.'/lib/uploadlib.php');
            $um = new upload_manager('newfile',true,false,$this->course,false,$\
this->assignment->maxbytes);
            if ($um->process_file_uploads($dir) and confirm_sesskey()) {
                $newfile_name = $um->get_new_filename();
                ...

  辺りで何かあったかと推測していますが、そもそも再現方法がわからない為
  どのように調査を進めたら良いか悩んでいる状況です。

以上のような状況ですが、どなたか同じような状況に遭遇された方はいらっしゃい
ませんでしょうか。もしくは、お気づきの点はありませんでしょうか。
Seiichirou Hiraoka への返信

Re: 単一ファイルのアップロード課題提出時に最終更新日時(学生)が更新されない問題

- Toshihiro KITA の投稿
以下を確かめることは可能ですか。

・データディレクトリ(moodledata) の下には、学生がアップロードした、該当するファイルが存在しているか
ls -R | grep ファイル名
等で見つけられます。

・データベースの mdl_assignment_submissions テーブルの中には、該当する提出記録が残っているか。
assignment と userid のフィールドで判別できます。

もし、ファイルはあるけれど提出記録が残っていないのであれば、MoodleのWebサーバと
PostgreSQLのサーバの間の通信が一時的にうまく動いていなかった可能性がありますね。

該当する時刻の apache のエラーログには何も残っていませんか。
Toshihiro KITA への返信

Re: 単一ファイルのアップロード課題提出時に最終更新日時(学生)が更新されない問題

- Seiichirou Hiraoka の投稿
KITA様

コメントを頂きありがとうございます。

- ファイルは保存されているか
  利用者の評定画面では提出したファイル名は見えており、クリックすることで表示
  出来ることは確認しております。

- DB中にログはあるか
  # select * from mdl_assignment_submissions where userid = 15501;
  id   | assignment | userid | timecreated | timemodified | numfiles | grade | teacher | timemarked | mailed | data2 | data1 | format |       submissioncomment
-------+------------+--------+-------------+--------------+----------+-------+---------+------------+--------+-------+-------+--------+-------------------------------
 73575 |       3287 |  15501 |           0 |            0 |        0 |    14 |       1 | 1306224432 |      1 |       |       |      1 | コメントコメント
(1 行)

  このように、timemodified が登録されていませんでした。
  (だから、最終更新日時が表示されないのだと思いますが)

  ただし、教員によりコメントを追記していますので、そのコメントとtimemarked
  は更新されているようです。

  問題が発生していない人の場合を確認すると、timemodified が登録されて
  いるようです。

- Apache のエラーログ。
  該当時間のログは見当たりませんでした。

以上、今回のログを見た限りでは、一時的に DB にアクセス出来ないことで
登録できなかったように思われますが、活動レポートで update update のログ
は登録されておりますので、assignment update のログだけが登録出来なかった
のはどうも府に落ちません。

今回の事象に関しまして、その他問題の原因切り分けを行うような術はあるでしょうか。
Seiichirou Hiraoka への返信

Re: 単一ファイルのアップロード課題提出時に最終更新日時(学生)が更新されない問題

- Seiichirou Hiraoka の投稿
お世話になっております。

今回の事象について、データベースへの接続時にエラーが発生した可能性が
考えられるため、データベース側のログレベルをあげようと思います。
同時に、Moodle側でもデータベースへの接続時にエラーが発生していないかについて
確認したいと思いますが、Moodleの実行時のエラーを記録する方法はありますでしょうか。
Moodle本体でエラーが記録できないのであれば、php.iniで何らかの設定をすることで、
Moodleのエラーを記録できますでしょうか。

以上、を頂けますと幸いです。
Seiichirou Hiraoka への返信

Re: 単一ファイルのアップロード課題提出時に最終更新日時(学生)が更新されない問題

- Toshihiro KITA の投稿
> Moodleの実行時のエラーを記録する方法はありますでしょうか。

サイト管理 - サーバ - デバッグ の画面で、デバッグメッセージを「ALL」等に
しておくと記録されるようになります。 その上で、apache のエラーログ等を見て、エラーを調べることになります。
Toshihiro KITA への返信

Re: 単一ファイルのアップロード課題提出時に最終更新日時(学生)が更新されない問題

- Seiichirou Hiraoka の投稿
php.ini のログ関連の設定を変更せずとも、アドバイス頂いたとおりに設定することで
Apacheのerror_log に出力されるようになりました。

念のため、php.iniの内容は以下のとおりです。
error_reporting  =  E_ALL & ~E_NOTICE
display_errors = Off
display_startup_errors = Off
log_errors = Off
;error_log = filename

どうもありがとうございました。
Seiichirou Hiraoka への返信

Re: 単一ファイルのアップロード課題提出時に最終更新日時(学生)が更新されない問題

- Seiichirou Hiraoka の投稿
お世話になっております。

念のため今回の事象が発生した際の画面キャプチャを掲載します。
50名のうち6名で問題が発生しておりますが、同じ先生の別のコースや別の先生の別のコースでも同じ事象が発生していることを確認します。

お気づきの点がありましたらご指摘ください。
添付 image1.PNG
Seiichirou Hiraoka への返信

Re: 単一ファイルのアップロード課題提出時に最終更新日時(学生)が更新されない問題

- Seiichirou Hiraoka の投稿
もう一つ添付します。
添付 image2.PNG
Seiichirou Hiraoka への返信

Re: 単一ファイルのアップロード課題提出時に最終更新日時(学生)が更新されない問題

- Seiichirou Hiraoka の投稿

どうやら、この問題は他の方の環境では発生していないようですね。

とりあえずの対策として、問題が発生した際に検出しようと考えています。

select * from mdl_log where action = 'upload';

でログを検索し、useridがコースの管理者で無い場合の処理をしようと考えておりますが、コースの管理者かどうかをどのように判別したら良いかがわかりません。

具体的には、mdl_log内のcourseカラムからどのようにコースの管理者名を検索したら良いか教えて頂けませんでしょうか。

コースの管理者名もしくは管理者IDが検索できれば、mdl_logのuseridと照合して、管理者のアップロードかどうかを切り分けることが出来ると思われます。

どうぞよろしくお願いいたします。