2007年04月09日(月) [長年日記]
■ [life] 風邪で寝込んだ
- 木曜日:ノドの調子が悪いなと感じていたが、特に問題なし。
- 金曜日:ノドの調子が更に悪くなり、鼻水が出て寒さに震えていたが仕事はできた。職場が寒すぎる。
- 土曜日:頭も痛くなり何もできず。一日中寝てた。
- 日曜日:朝目覚めたときに大分よくなったと感じた。病気は眠っている間に治る。が、頭痛は治らず結局ほとんど寝ていた。選挙へは行かず。
- 月曜日:頭痛も治まり、仕事できそう。
一貫して食欲はあったので、たいした病ではなかった。でも寝込んでいる間はとても心細かった。どこも痛くないってのは幸せなことだなあ。
■ [book] 日蝕 (平野 啓一郎)
読んだ。芥川賞受賞作。15世紀末のフランスで、学僧ニコラがとある村にて奇妙な体験をする話。読めない漢字がたくさん。独自の雰囲気はあるが特に面白い話ではなかった。キリスト教に造詣が深い人にとっては面白いのかも。2.5点。
■ やること
- 年金
2007年04月10日(火) [長年日記]
- クリーニング屋へ行った。20%引きで2点で約3500円。
■ [ruby] ActiveRecordのアクセッサをカスタマイズ
ActiveRecordのアクセッサをカスタマイズしたいとき、DBの値を参照したり設定するためには、read_attribute() と write_attribute()を使えばよい。
Class ActiveRecord::Baseのドキュメントの「Overwriting default accessors」という章に書かれていた。
■ [life] 新宿で本を買う
微妙に時間があったので、久しぶりに新宿駅で降りて買い物。「正しいRubyコードの書き方講座」を見ようとヨドバシカメラの本売り場へ行ったが売ってない。Rails本の立ち読みもしたかったのだけれど、目当ての本は置いてなかった。なんだよ。
仕方ないのでぐるーっと回って紀伊國屋書店へ行った。9時で閉店なんだな。もう時間ギリギリで、とりあえず「書き方講座」は買った。Rails本もあったが立ち読みする時間はなし。
■ やること
- 年金
- スポンジ
- 歯ブラシ
2007年04月11日(水) [長年日記]
- 今日作ったのは、キャンセル処理と追加の測定要素を扱えるようにする所。なかなか進まない。
■ [c] printfでdouble型に小数部が無い場合は表示しない方法
1.0を1と出力したい場合は「%g」を使えばいいみたい。Rubyでも同じ。printfのマニュアルから引用しておく。
g,G
double 引き数を f か e (G 変換の場合は F か E) の形式に変換する。精度は表示する桁数を指定する。精度が指定されない場合は、6桁とみなされる。精度が 0 の場合は、1桁とみなされる。変換される値の指数が、 -4 より小さいか、精度以上の場合に、 e 形式が使用される。変換された結果の小数部分の末尾の 0 は削除される。小数点が表示されるのは、小数点以下に数字が少なくとも一つある場合にだけである。
「%f」だと、精度を0にしない場合は必ず小数部が表示されてしまう。
■ やること
- 年金
- スポンジ
- 歯ブラシ
2007年04月14日(土) [長年日記]
- 土曜日だが職場へ。
- 結局MySQLの設定しかしていないじゃないか!
■ [ruby][db] RailsをMySQLと一緒に使った
今まではSQLiteを使っていたけど、ちょっとMySQLを導入してみた。
パッケージのインストール
Fedora Core 6を使っているので、
# yum install mysql-server
でよい。バージョン 5.0.27 がインストールされた。
後に「Lost connection to MySQL server during query」エラーが多発したので、MySQL Connection Problemsなどを参考にして次もインストールした。
# yum install mysql-devel # gem install mysql -- --with-mysql-config=`which mysql_config`
MySQLの設定
MySQL使うのは1年ぶりくらいかな。もう何もかも忘れている。パッケージをインストールしたら /etc/my.cnf ができていたので、[mysqld] セクションに「skip-networking」を追加しネットワークアクセスを禁止したつもり。
後に文字化け問題が発生したので、くまくまーを参考にして「default-character-set=utf8」「skip-character-set-client-handshake」も記述した。
/etc/init.d/mysqld スクリプトを使ってMySQLのプロセスを起動したら、自動的にデータファイルを作ってくれた。で、
$ /usr/bin/mysqladmin -u root password 'new-password' $ /usr/bin/mysqladmin -u root -h HOST_NAME password 'new-password'
によりrootのパスワードを設定した。
データベースの作成
MySQLに接続して、アプリケーション用のデータベースを作成する。
mysql> create database oreore_production; mysql> create database oreore_development; mysql> create database oreore_test;
アプリケーションが使用するアカウントも作成する。
mysql> grant all on oreore_production.* to oreore@localhost IDENTIFIED BY 'password'; mysql> grant all on oreore_development.* to oreore@localhost; mysql> grant all on oreore_test.* to oreore@localhost;
MySQLのユーザ管理は謎めいていて頭が痛い。これで問題ないのかな?権限を与えすぎている可能性あり。
Railsの設定
database.ymlを作成する。railsコマンドが作ってくれる雛形に対して、
socket: /var/lib/mysql/mysql.sock
のような行を追加した。MySQLが mysql.sock を作成する場所に合わせる。
database.ymlにDB接続のパスワードを平文で書き込むのが嫌だ。何か対策があるはずだと思うが未調査。
問題点
「MySQL server has gone away」というエラーが発生することがある。未解決。
(追記)
続きがあります。
■ やること
- 年金
- スポンジ
- 歯ブラシ
2007年04月16日(月) [長年日記]
- 夜眠れない。
- MySQLは色々面倒だな。
■ [ruby][db] 「MySQL server has gone away」エラー一応解決
土曜日に未解決だった「MySQL server has gone away」エラーが出る件で何が起こっているのか少しわかったのでメモ。
今作っているRailsアプリケーションには、forkする変な処理がある。forkした後で子プロセスが終了するとMySQLとの接続が閉じられ、そうすると親プロセスがDBを参照しようとしたときに件のエラーが発生することがあるみたい。
こんな風にしてエラーが起こっているように見える:
railsプロセス | +-- fork --> 子プロセスA (waitしない) | | +-- fork --> 子プロセスB | (wait) | | : exec失敗 | 子プロセスA x DBへアクセス の終了を検出 するとエラー | | DBへアクセス | するとエラー | x
子プロセスBの終了時にMySQLとの接続がクローズし、その後railsプロセスや子プロセスAはそのクローズした接続を使ってDBにアクセスしようとするからエラーになるのではないかと思う。
で、子プロセス終了時にexit!を呼び出すようにしたらエラーは出なくなった。exit! って安直に使っても大丈夫なんだろうか。リソースリークが起こるような気もする。fork じゃなくてスレッドを使うように直した方がいいのかなあ。
[ruby-list:43021] Open3に似たような話があって、参考にした。
(追記)
直ってなかったみたい。まだエラーになることがある。
ActiveRecord::Base.remove_connection()とActiveRecord::Base.establish_connection()というメソッドがあったので、fork()した後でこれらを呼び出してDBとの接続をリセットするようにしたら改善された気がする。これで直るといいけど。
■ やること
- 年金
- スポンジ
- 歯ブラシ
2007年04月22日(日) [長年日記]
- あっという間の一週間。
- 今日やったこと:
- クリーニング屋へ行った
- ずっとサボっていた帳簿をつけた
- 2000以上あったLDRの未読エントリを939まで減らした
■ やること
- 年金
スポンジ- 歯ブラシ
● まりこ [インフルエンザは タミフルで 完治 けど タミフル 飲んだら やたら 気分が 凹みました… 飛び降りはしなかった..]