1.39.10にて新規ルーム作成時にエラー
- くまかば
- Topic Author
11 years 5 months ago #213
by くまかば
くまかば created the topic: 1.39.10にて新規ルーム作成時にエラー
お世話になっとります。プレイより前に環境構築で遊ばせていただいておる変態でございます。
■環境
CentOS6.3
Apache2.2.15 + mod_fcgid
■現象
新規ルーム作成時に「Server Error」と出て画面遷移せず。debug設定でlog.txtを見ると以下のException。
E, [2012-10-27T21:18:55.780305 #2199] ERROR -- : exception mean:Permission denied - /chat.json.lock
E, [2012-10-27T21:18:55.780499 #2199] ERROR -- : exception from:/var/www/ddntf/public_html/DodontoF/src_ruby/FileLock.rb:13:in `initialize'
/var/www/ddntf/public_html/DodontoF/src_ruby/FileLock.rb:13:in `open'
/var/www/ddntf/public_html/DodontoF/src_ruby/FileLock.rb:13:in `createLockFile'
/var/www/ddntf/public_html/DodontoF/src_ruby/FileLock.rb:8:in `initialize'
/var/www/ddntf/public_html/DodontoF/DodontoFServer.rb:175:in `new'
/var/www/ddntf/public_html/DodontoF/DodontoFServer.rb:175:in `getSaveFileLockRealFile'
/var/www/ddntf/public_html/DodontoF/DodontoFServer.rb:169:in `getSaveFileLock'
/var/www/ddntf/public_html/DodontoF/DodontoFServer.rb:405:in `changeSaveData'
/var/www/ddntf/public_html/DodontoF/DodontoFServer.rb:4368:in `sendChatMessageByChatData'
/var/www/ddntf/public_html/DodontoF/DodontoFServer.rb:2349:in `sendRoomCreateMessage'
/var/www/ddntf/public_html/DodontoF/DodontoFServer.rb:2311:in `createPlayRoom'
(eval):1:in `analyzeCommand'
どうも「/」(ルートディレクトリ)にlockファイルを作ろうとしてコケている模様。
おそらくmysqlだと出ないんじゃないかと思いまする。
■環境
CentOS6.3
Apache2.2.15 + mod_fcgid
■現象
新規ルーム作成時に「Server Error」と出て画面遷移せず。debug設定でlog.txtを見ると以下のException。
E, [2012-10-27T21:18:55.780305 #2199] ERROR -- : exception mean:Permission denied - /chat.json.lock
E, [2012-10-27T21:18:55.780499 #2199] ERROR -- : exception from:/var/www/ddntf/public_html/DodontoF/src_ruby/FileLock.rb:13:in `initialize'
/var/www/ddntf/public_html/DodontoF/src_ruby/FileLock.rb:13:in `open'
/var/www/ddntf/public_html/DodontoF/src_ruby/FileLock.rb:13:in `createLockFile'
/var/www/ddntf/public_html/DodontoF/src_ruby/FileLock.rb:8:in `initialize'
/var/www/ddntf/public_html/DodontoF/DodontoFServer.rb:175:in `new'
/var/www/ddntf/public_html/DodontoF/DodontoFServer.rb:175:in `getSaveFileLockRealFile'
/var/www/ddntf/public_html/DodontoF/DodontoFServer.rb:169:in `getSaveFileLock'
/var/www/ddntf/public_html/DodontoF/DodontoFServer.rb:405:in `changeSaveData'
/var/www/ddntf/public_html/DodontoF/DodontoFServer.rb:4368:in `sendChatMessageByChatData'
/var/www/ddntf/public_html/DodontoF/DodontoFServer.rb:2349:in `sendRoomCreateMessage'
/var/www/ddntf/public_html/DodontoF/DodontoFServer.rb:2311:in `createPlayRoom'
(eval):1:in `analyzeCommand'
どうも「/」(ルートディレクトリ)にlockファイルを作ろうとしてコケている模様。
おそらくmysqlだと出ないんじゃないかと思いまする。
Reply to くまかば
- くまかば
- Topic Author
11 years 5 months ago #214
by くまかば
くまかば replied the topic: Re: 1.39.10にて新規ルーム作成時にエラー
で、以下のように修整してみると治りましたん。
*** ../../1.39.10/DodontoF/DodontoFServer.rb 2012-10-27 19:21:44.000000000 +0900
--- DodontoFServer.rb 2012-10-27 21:48:32.005724676 +0900
***************
*** 4365,4371 ****
chatMessageData = nil
! changeSaveData(@saveFiles) do |saveData|
chatMessageDataLog = getChatMessageDataLog(saveData)
deleteOldChatMessageData(chatMessageDataLog);
--- 4365,4371 ----
chatMessageData = nil
! changeSaveData(@saveDirInfo.getTrueSaveFileName(@saveFiles)) do |saveData|
chatMessageDataLog = getChatMessageDataLog(saveData)
deleteOldChatMessageData(chatMessageDataLog);
***************
*** 6166,6172 ****
length = ENV.to_i
logging(length, "getCgiParams length")
! input = STDIN.read(length)
logging(input, "getCgiParams input")
messagePackedData = DodontoFServer.getMessagePackFromData( input )
--- 6166,6177 ----
length = ENV.to_i
logging(length, "getCgiParams length")
! #input = STDIN.read(length)
! if ENV == "POST" then
! input = $stdin.read(length)
! else
! input = ENV
! end
logging(input, "getCgiParams input")
messagePackedData = DodontoFServer.getMessagePackFromData( input )
(後半の6166行以降のdiffはfcgid対応です)
*** ../../1.39.10/DodontoF/DodontoFServer.rb 2012-10-27 19:21:44.000000000 +0900
--- DodontoFServer.rb 2012-10-27 21:48:32.005724676 +0900
***************
*** 4365,4371 ****
chatMessageData = nil
! changeSaveData(@saveFiles) do |saveData|
chatMessageDataLog = getChatMessageDataLog(saveData)
deleteOldChatMessageData(chatMessageDataLog);
--- 4365,4371 ----
chatMessageData = nil
! changeSaveData(@saveDirInfo.getTrueSaveFileName(@saveFiles)) do |saveData|
chatMessageDataLog = getChatMessageDataLog(saveData)
deleteOldChatMessageData(chatMessageDataLog);
***************
*** 6166,6172 ****
length = ENV.to_i
logging(length, "getCgiParams length")
! input = STDIN.read(length)
logging(input, "getCgiParams input")
messagePackedData = DodontoFServer.getMessagePackFromData( input )
--- 6166,6177 ----
length = ENV.to_i
logging(length, "getCgiParams length")
! #input = STDIN.read(length)
! if ENV == "POST" then
! input = $stdin.read(length)
! else
! input = ENV
! end
logging(input, "getCgiParams input")
messagePackedData = DodontoFServer.getMessagePackFromData( input )
(後半の6166行以降のdiffはfcgid対応です)
Reply to くまかば
- くまかば
- Topic Author
11 years 5 months ago #215
by くまかば
くまかば replied the topic: Re: 1.39.10にて新規ルーム作成時にエラー
ついでにウチで使ってるfcgid用のwrapper載せときます。
#!/usr/bin/ruby
#--*-coding:utf-8-*--
Encoding.default_external='utf-8' if defined?(Encoding) && Encoding.respond_to?('default_external')
require 'rubygems'
require 'fcgi'
require 'logger'
$logger = Logger.new('./fcgilog.txt')
$logger.level = Logger::DEBUG
$logger.info("### FCGI.each start")
FCGI.each do |fcgi|
$logger.info("do")
begin
$logger.info(" begin")
$stdout = fcgi.out
$stdin = fcgi.in
ENV.replace(fcgi.env)
$logger.info(" load")
load 'DodontoFServer.rb'
$logger.info(" execute")
executeDodontoServerCgi()
#initLog()
#cgiParams = getCgiParams()
#main(cgiParams)
fcgi.finish
$logger.info(" finish")
rescue Exception => e
$logger.fatal(e)
end
$logger.info("end")
end
$logger.info("### FCGI.each end")
Reply to くまかば
- くまかば
- Topic Author
11 years 5 months ago #216
by くまかば
くまかば replied the topic: Re: 1.39.10にて新規ルーム作成時にエラー
もいっちょついでに。
swfをブラウザ画面に合わせて表示してみるindex.html。スマホは要検証。
ブラウザタイトルとかfaviconとか変えたい人向け。
ところでshortcut icon設定したら既にfaviconがいたでござる、の巻。
swfをブラウザ画面に合わせて表示してみるindex.html。スマホは要検証。
ブラウザタイトルとかfaviconとか変えたい人向け。
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" lang="ja" xml:lang="ja">
<head>
<meta charset="utf-8" />
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>どどんとふ</title>
<link rel="shortcut icon" href="./favicon.ico" />
<style type="text/css">
*{
margin: 0;
padding: 0;
}
html,body{
height: 100%;
background: url(null) fixed;
}
body{
background-color:#888888;
text-align:center;
}
embed{
margin:auto;
}
</style>
</head>
<body>
<embed src="./DodontoF.swf" width="99%" height="99%"/>
</body>
</html>
ところでshortcut icon設定したら既にfaviconがいたでござる、の巻。
Reply to くまかば
11 years 5 months ago #217
by たいたい竹流
たいたい竹流 replied the topic: Re: 1.39.10にて新規ルーム作成時にエラー
これ、色々と試してみているのですが、まず第一に不具合がこちらでは再現しません。
MySQL版でも、ファイル保存版でも。
第二に、前半の修正
changeSaveData(@saveDirInfo.getTrueSaveFileName(@saveFiles)) do |saveData|
この修正方法、オカシイのですよね。
このやり方だと、常にファイル名の指定しなおしているのですが、
本来ならこの処理は不要です。
その差し替えは既存処理の
def initSaveFiles(roomNumber)
@saveDirInfo.init(roomNumber, $saveDataMaxCount, $SAVE_DATA_DIR)
@saveFiles = {}
$saveFiles.each do |saveDataKeyName, saveFileName|
logging(saveDataKeyName, "saveDataKeyName")
logging(saveFileName, "saveFileName")
@saveFiles[saveDataKeyName] = @saveDirInfo.getTrueSaveFileName(saveFileName)
end
end
で行われているのですから。
現に、私の手持ちの環境で上記修正をやるとパスの変換を2回かけてしまってエラーが発生しました。
何かそちらで環境固有の変更かけていて、
それが悪さをしているのではないでしょうか?
あと、後半の修正内容については了解です。
ただ、これもRubyの変数スコープの問題で
input = nil
if ENV == "POST" then
input = $stdin.read(length)
else
input = ENV
end
と、最初に null 宣言してやらないと input のスコープが if と elfse それぞれで閉じてしまって if の外側で input が参照できなくなります。
#場合によっては運よく動く場合もありますが、Rubyのバージョン・環境に依存します。
以上です。
MySQL版でも、ファイル保存版でも。
第二に、前半の修正
changeSaveData(@saveDirInfo.getTrueSaveFileName(@saveFiles)) do |saveData|
この修正方法、オカシイのですよね。
このやり方だと、常にファイル名の指定しなおしているのですが、
本来ならこの処理は不要です。
その差し替えは既存処理の
def initSaveFiles(roomNumber)
@saveDirInfo.init(roomNumber, $saveDataMaxCount, $SAVE_DATA_DIR)
@saveFiles = {}
$saveFiles.each do |saveDataKeyName, saveFileName|
logging(saveDataKeyName, "saveDataKeyName")
logging(saveFileName, "saveFileName")
@saveFiles[saveDataKeyName] = @saveDirInfo.getTrueSaveFileName(saveFileName)
end
end
で行われているのですから。
現に、私の手持ちの環境で上記修正をやるとパスの変換を2回かけてしまってエラーが発生しました。
何かそちらで環境固有の変更かけていて、
それが悪さをしているのではないでしょうか?
あと、後半の修正内容については了解です。
ただ、これもRubyの変数スコープの問題で
input = nil
if ENV == "POST" then
input = $stdin.read(length)
else
input = ENV
end
と、最初に null 宣言してやらないと input のスコープが if と elfse それぞれで閉じてしまって if の外側で input が参照できなくなります。
#場合によっては運よく動く場合もありますが、Rubyのバージョン・環境に依存します。
以上です。
Reply to たいたい竹流
- くまかば
- Topic Author
11 years 5 months ago #218
by くまかば
くまかば replied the topic: Re: 1.39.10にて新規ルーム作成時にエラー
ども。再現しませんかー。
CentOS6.3のminimalインストールから構築していて、
ruby本体もCentOS@baseの1.8.7のまま。
FCGI使ってる点を除けばそんなに特殊な環境では
ないかとは思ってるのですが、特に後半の変数スコープに
ついては確かに「あれ?」なのでもう一個別OSで環境作ってみます。
CentOS6.3のminimalインストールから構築していて、
ruby本体もCentOS@baseの1.8.7のまま。
FCGI使ってる点を除けばそんなに特殊な環境では
ないかとは思ってるのですが、特に後半の変数スコープに
ついては確かに「あれ?」なのでもう一個別OSで環境作ってみます。
Reply to くまかば
11 years 5 months ago #219
by たいたい竹流
たいたい竹流 replied the topic: Re: 1.39.10にて新規ルーム作成時にエラー
どうやっても再現しないのですよねぇ。
正直、FCGIを私自身が使った事がないので何とも。。。
他の方からも使っていると聞かないのでやはり特殊なのではないかとは思います。
あと、この修正方法、部屋は作れるようになりますけど、
部屋作った後のチャットってちゃんと動いていますか?
ブラウザで2個どどんとふ開いてチャットが相互で動くのかが気になります。
スコープについては、私のローカル環境でも正常に動きましたね。
でも言語仕様的にはNGのはずなので、バージョンによっては動かない場合があるはずです
(あるいは、古いバージョンだとエラーになるのかもしれません)
正直、FCGIを私自身が使った事がないので何とも。。。
他の方からも使っていると聞かないのでやはり特殊なのではないかとは思います。
あと、この修正方法、部屋は作れるようになりますけど、
部屋作った後のチャットってちゃんと動いていますか?
ブラウザで2個どどんとふ開いてチャットが相互で動くのかが気になります。
スコープについては、私のローカル環境でも正常に動きましたね。
でも言語仕様的にはNGのはずなので、バージョンによっては動かない場合があるはずです
(あるいは、古いバージョンだとエラーになるのかもしれません)
Reply to たいたい竹流
- くまかば
- Topic Author
11 years 5 months ago #220
by くまかば
くまかば replied the topic: Re: 1.39.10にて新規ルーム作成時にエラー
動作自体は正常でしたねー。
実際に3人で入ってもらってウィッチクエストのSETロール振ったり立ち絵で遊んでましたし。
で、FCGI外して(単なるCGIとして動かしても)こちらでは再現してしまうのです。
環境が違う、と言われるとそこはちょと否定が難しいためいくつかパターン取ってみます。
お手数おかけしました。ありがとうございました。
実際に3人で入ってもらってウィッチクエストのSETロール振ったり立ち絵で遊んでましたし。
で、FCGI外して(単なるCGIとして動かしても)こちらでは再現してしまうのです。
環境が違う、と言われるとそこはちょと否定が難しいためいくつかパターン取ってみます。
お手数おかけしました。ありがとうございました。
Reply to くまかば
11 years 5 months ago #221
by たいたい竹流
たいたい竹流 replied the topic: Re: 1.39.10にて新規ルーム作成時にエラー
いえ、CGIで動かしても問題があるとなると気になりますね…
元の媒体から純粋に何を変えているのかがポイントになるかと。
媒体に含まれているファイルは間違いなく上書きしていますか?
(差分が無いと判断して差し替えていない、と言う事がないか)
新規ルーム作成というのは、ログイン画面左下のボタンから実行しているのか。
また、以前お話した「古い部屋が中途半端に残っている」状態ではないのか?
それとTwitter側の話で気になったのですが、今までのバージョンでもこの現象って出てるのですか?
他の方からは類似の報告が無いため、
セーブデータが変な状態にでもなっているのではないかと思っています。
一度saveDataディレクトリ新規に作れば解決しそうな気はします。
元の媒体から純粋に何を変えているのかがポイントになるかと。
媒体に含まれているファイルは間違いなく上書きしていますか?
(差分が無いと判断して差し替えていない、と言う事がないか)
新規ルーム作成というのは、ログイン画面左下のボタンから実行しているのか。
また、以前お話した「古い部屋が中途半端に残っている」状態ではないのか?
それとTwitter側の話で気になったのですが、今までのバージョンでもこの現象って出てるのですか?
他の方からは類似の報告が無いため、
セーブデータが変な状態にでもなっているのではないかと思っています。
一度saveDataディレクトリ新規に作れば解決しそうな気はします。
Reply to たいたい竹流
- くまかば
- Topic Author
11 years 5 months ago #222
by くまかば
くまかば replied the topic: Re: 1.39.10にて新規ルーム作成時にエラー
新版出るたびにディレクトリ単位で入れ替えて最小限のpatchを当ててるので、
上書き(入れ替え)失敗は無いかなと思います。(diffでも確認しました)
ちなみにsaveDataディレクトリ全クリアでも同様の現象でした。
仰る通り、お手元含め他で出てない現象のため、環境依存の何かしらの要因はあるかと思います。
まずその辺を洗ってみます。
上書き(入れ替え)失敗は無いかなと思います。(diffでも確認しました)
ちなみにsaveDataディレクトリ全クリアでも同様の現象でした。
仰る通り、お手元含め他で出てない現象のため、環境依存の何かしらの要因はあるかと思います。
まずその辺を洗ってみます。
Reply to くまかば
- くまかば
- Topic Author
11 years 5 months ago #223
by くまかば
くまかば replied the topic: Re: 1.39.10にて新規ルーム作成時にエラー
念のため、diffの結果貼っておきます。(1.39.10が素で1.39.10aが実行環境)
DodontoFServer.rbはいま素に戻してCGI動作で見てます。
DodontoFServer.rbはいま素に戻してCGI動作で見てます。
[ddntf@ddntf ddntf]$ diff -r 1.39.10/ 1.39.10a/
1.39.10a/DodontoFだけに発見: DodontoFServer.fcgi
1.39.10a/DodontoFだけに発見: fcgilog.txt
diff -r 1.39.10/DodontoF/src_ruby/config.rb 1.39.10a/DodontoF/src_ruby/config.rb
5c5
< $debug = false
---
> $debug = true
166c166
< $isPaformanceMonitor = false;
---
> $isPaformanceMonitor = true;
169c169
< $fps = 60
---
> $fps = 30
183c183
< $canTalk = true
---
> $canTalk = false
228c228
< $isMessagePackInstalled = false
---
> $isMessagePackInstalled = true
Reply to くまかば
- くまかば
- Topic Author
11 years 5 months ago #224
by くまかば
くまかば replied the topic: Re: 1.39.10にて新規ルーム作成時にエラー
たびたび申し訳なく。
私が構築を試みたのが1.39.09からなので1.39.08以前は不明ですが、
1.39.00の安定板では問題は生じていません。
今までのバージョンでもこの現象って出てるのですか?
他の方からは類似の報告が無いため、
セーブデータが変な状態にでもなっているのではないかと思っています。
私が構築を試みたのが1.39.09からなので1.39.08以前は不明ですが、
1.39.00の安定板では問題は生じていません。
Reply to くまかば
Time to create page: 0.163 seconds