平岡です。
単一ファイルのアップロード課題にて問題がありますので、アドバイスを
頂けますと幸いです。
- 環境
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();
...
辺りで何かあったかと推測していますが、そもそも再現方法がわからない為
どのように調査を進めたら良いか悩んでいる状況です。
以上のような状況ですが、どなたか同じような状況に遭遇された方はいらっしゃい
ませんでしょうか。もしくは、お気づきの点はありませんでしょうか。
申し訳ありません、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(); ... 辺りで何かあったかと推測していますが、そもそも再現方法がわからない為 どのように調査を進めたら良いか悩んでいる状況です。 以上のような状況ですが、どなたか同じような状況に遭遇された方はいらっしゃい ませんでしょうか。もしくは、お気づきの点はありませんでしょうか。
以下を確かめることは可能ですか。
・データディレクトリ(moodledata) の下には、学生がアップロードした、該当するファイルが存在しているか
ls -R | grep ファイル名
等で見つけられます。
・データベースの mdl_assignment_submissions テーブルの中には、該当する提出記録が残っているか。
assignment と userid のフィールドで判別できます。
もし、ファイルはあるけれど提出記録が残っていないのであれば、MoodleのWebサーバと
PostgreSQLのサーバの間の通信が一時的にうまく動いていなかった可能性がありますね。
該当する時刻の apache のエラーログには何も残っていませんか。
・データディレクトリ(moodledata) の下には、学生がアップロードした、該当するファイルが存在しているか
ls -R | grep ファイル名
等で見つけられます。
・データベースの mdl_assignment_submissions テーブルの中には、該当する提出記録が残っているか。
assignment と userid のフィールドで判別できます。
もし、ファイルはあるけれど提出記録が残っていないのであれば、MoodleのWebサーバと
PostgreSQLのサーバの間の通信が一時的にうまく動いていなかった可能性がありますね。
該当する時刻の apache のエラーログには何も残っていませんか。
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 のログだけが登録出来なかった のはどうも府に落ちません。 今回の事象に関しまして、その他問題の原因切り分けを行うような術はあるでしょうか。
どうやら、この問題は他の方の環境では発生していないようですね。
とりあえずの対策として、問題が発生した際に検出しようと考えています。
select * from mdl_log where action = 'upload';
でログを検索し、useridがコースの管理者で無い場合の処理をしようと考えておりますが、コースの管理者かどうかをどのように判別したら良いかがわかりません。
具体的には、mdl_log内のcourseカラムからどのようにコースの管理者名を検索したら良いか教えて頂けませんでしょうか。
コースの管理者名もしくは管理者IDが検索できれば、mdl_logのuseridと照合して、管理者のアップロードかどうかを切り分けることが出来ると思われます。
どうぞよろしくお願いいたします。