メモの日々


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] 新宿で本を買う

Rubyist Magazine 出張版 正しいRubyコードの書き方講座―RubyistのRubyistによる、Rubyistとそうでない人のための(青木 峰郎) 微妙に時間があったので、久しぶりに新宿駅で降りて買い物。「正しいRubyコードの書き方講座」を見ようとヨドバシカメラの本売り場へ行ったが売ってない。Rails本の立ち読みもしたかったのだけれど、目当ての本は置いてなかった。なんだよ。

仕方ないのでぐるーっと回って紀伊國屋書店へ行った。9時で閉店なんだな。もう時間ギリギリで、とりあえず「書き方講座」は買った。Rails本もあったが立ち読みする時間はなし。

やること

  • 年金
  • スポンジ
  • 歯ブラシ
本日のツッコミ(全1件) [ツッコミを入れる]

まりこ [インフルエンザは タミフルで 完治 けど タミフル 飲んだら やたら 気分が 凹みました… 飛び降りはしなかった..]


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まで減らした

やること

  • 年金
  • スポンジ
  • 歯ブラシ