1.39.10にて新規ルーム作成時にエラー

  • くまかば
  • くまかば's Avatar Topic Author
5 years 8 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だと出ないんじゃないかと思いまする。
  • くまかば
  • くまかば's Avatar Topic Author
5 years 8 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対応です)
  • くまかば
  • くまかば's Avatar Topic Author
5 years 8 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")
  • くまかば
  • くまかば's Avatar Topic Author
5 years 8 months ago #216 by くまかば
くまかば replied the topic: Re: 1.39.10にて新規ルーム作成時にエラー
もいっちょついでに。
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がいたでござる、の巻。
More
5 years 8 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のバージョン・環境に依存します。

以上です。
  • くまかば
  • くまかば's Avatar Topic Author
5 years 8 months ago #218 by くまかば
くまかば replied the topic: Re: 1.39.10にて新規ルーム作成時にエラー
ども。再現しませんかー。

CentOS6.3のminimalインストールから構築していて、
ruby本体もCentOS@baseの1.8.7のまま。
FCGI使ってる点を除けばそんなに特殊な環境では
ないかとは思ってるのですが、特に後半の変数スコープに
ついては確かに「あれ?」なのでもう一個別OSで環境作ってみます。
More
5 years 8 months ago #219 by たいたい竹流
たいたい竹流 replied the topic: Re: 1.39.10にて新規ルーム作成時にエラー
どうやっても再現しないのですよねぇ。
正直、FCGIを私自身が使った事がないので何とも。。。
他の方からも使っていると聞かないのでやはり特殊なのではないかとは思います。

あと、この修正方法、部屋は作れるようになりますけど、
部屋作った後のチャットってちゃんと動いていますか?
ブラウザで2個どどんとふ開いてチャットが相互で動くのかが気になります。

スコープについては、私のローカル環境でも正常に動きましたね。
でも言語仕様的にはNGのはずなので、バージョンによっては動かない場合があるはずです
(あるいは、古いバージョンだとエラーになるのかもしれません)
  • くまかば
  • くまかば's Avatar Topic Author
5 years 8 months ago #220 by くまかば
くまかば replied the topic: Re: 1.39.10にて新規ルーム作成時にエラー
動作自体は正常でしたねー。
実際に3人で入ってもらってウィッチクエストのSETロール振ったり立ち絵で遊んでましたし。

で、FCGI外して(単なるCGIとして動かしても)こちらでは再現してしまうのです。

環境が違う、と言われるとそこはちょと否定が難しいためいくつかパターン取ってみます。
お手数おかけしました。ありがとうございました。
More
5 years 8 months ago #221 by たいたい竹流
たいたい竹流 replied the topic: Re: 1.39.10にて新規ルーム作成時にエラー
いえ、CGIで動かしても問題があるとなると気になりますね…
元の媒体から純粋に何を変えているのかがポイントになるかと。

媒体に含まれているファイルは間違いなく上書きしていますか?
(差分が無いと判断して差し替えていない、と言う事がないか)
新規ルーム作成というのは、ログイン画面左下のボタンから実行しているのか。
また、以前お話した「古い部屋が中途半端に残っている」状態ではないのか?

それとTwitter側の話で気になったのですが、今までのバージョンでもこの現象って出てるのですか?
他の方からは類似の報告が無いため、
セーブデータが変な状態にでもなっているのではないかと思っています。
一度saveDataディレクトリ新規に作れば解決しそうな気はします。
  • くまかば
  • くまかば's Avatar Topic Author
5 years 8 months ago #222 by くまかば
くまかば replied the topic: Re: 1.39.10にて新規ルーム作成時にエラー
新版出るたびにディレクトリ単位で入れ替えて最小限のpatchを当ててるので、
上書き(入れ替え)失敗は無いかなと思います。(diffでも確認しました)
ちなみにsaveDataディレクトリ全クリアでも同様の現象でした。

仰る通り、お手元含め他で出てない現象のため、環境依存の何かしらの要因はあるかと思います。
まずその辺を洗ってみます。
  • くまかば
  • くまかば's Avatar Topic Author
5 years 8 months ago #223 by くまかば
くまかば replied the topic: Re: 1.39.10にて新規ルーム作成時にエラー
念のため、diffの結果貼っておきます。(1.39.10が素で1.39.10aが実行環境)
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
  • くまかば
  • くまかば's Avatar Topic Author
5 years 8 months ago #224 by くまかば
くまかば replied the topic: Re: 1.39.10にて新規ルーム作成時にエラー
たびたび申し訳なく。

今までのバージョンでもこの現象って出てるのですか?
他の方からは類似の報告が無いため、
セーブデータが変な状態にでもなっているのではないかと思っています。


私が構築を試みたのが1.39.09からなので1.39.08以前は不明ですが、
1.39.00の安定板では問題は生じていません。
Moderators: くまかばらぁ
Time to create page: 0.475 seconds
Powered by Kunena Forum

Login Form

ログインしなくても質問・回答は可能です。 アカウントを作製してログインすると更新通知などの機能が使えるようになります。
Handbook

Banner
作者にAmazonギフト券を送る
→宛先:This email address is being protected from spambots. You need JavaScript enabled to view it.
Donation