Typo のバグ
コメントが有効になりました のコメントで指摘された件ですが、どうやら Typo のバグのようです。
RAILS_ROOT/config/routes.rb にあるルート定義を行っている方法が古いようです。
たぶん、名前付きのルートの部分を全面的に直さないといけない気がします。 とりあえず、上で指摘されていた部分は先頭(追加場所は未検証)
を追加すれば直りました。
本家にバグレポして直してもらう必要があるようです。
Posted in Ruby | コメントはありません |
nginx + thin or Apache + fcgi
両方試した結果、しばらく後者で運用することにしました。
理由は以下。
- サーバマシンのメモリが 256MB しかない
- thin はプロセスごとの消費メモリが 50MB から 100MB 程度
- Rails アプリを三つ動かしてるので thin のプロセスが多い (6プロセス)
そんな感じでメモリの消費が多くてスワップしまくりだったのが遅い原因でした。
Rails アプリで nginx + thin を使うときは thin のプロセス数 * 100MB を以上搭載するのが目安になりそうです。
Posted in Ruby | コメントはありません |
nginx + thin
やってみた。
色々と試行錯誤した結果なんとか安定したのでその手順をメモしておく。
インストール
nginx からソースを落としてビルドする。
Thin - yet another web server は RubyGems でインストールする。
設定
thin の設定はコマンドラインでサンプルファイルを生成して、 /etc/thin 以下へコピーするだけ。 サーバの数を増やしすぎると、パフォーマンスが悪くなるので程々にしておく。 うちの場合は Rails アプリが三つあるのでそれぞれに二つずつサーバを起動するようにした。
# 三つずつにした場合は極端にパフォーマンスが悪化した。
nginx の設定は Main - Nginx Wiki を参照して行う。
移行
- Apache の設定を変更 (Listen 8080 にする)
- thin を起動
- Apache を再起動
- nginx を起動
- 動作確認
以降の設定変更は気をつける。
- thin -C 設定ファイル restart
- kill -HUP nginx の pid (pid ファイルを参照) ** すぐには反映されないので注意する
- Apache は普通に再起動する
はまったポイント
- proxy の設定
- rewrite の設定
- 設定の再読み込みが出来ていなかったこと (kill -HUP pid)
疑問点
- 特定のアプリで prototype.js の読み込みはすぐに終わるのにその後の動きが鈍い ** 読み込まなければ速い
Posted in Ruby, Debian | コメントはありません |
mongrel-1.1.5-java と mongrel-1.1.5
JRuby で mongrel を動かしたくて mongrel-1.1.5-java を入れたけど動かなかった。
それをそのまま放置していたら普通の Ruby で mongrel が動かなくて焦った。 mongrel-java を消したら解決したけど、焦った。
たぶん、原因はロードパスがおかしくなったことだと思う。
ちょっとこれ以上はわからない。。。
Posted in Ruby | コメントはありません |
JRuby on Rails with Tomcat
とりあえず、動いたので手順だけ。
必要なもの。
- JRuby 1.1.3
- Tomcat6 (Tomcat5.5だと動かなかった)
- Gem (必要なものを入れる) ** activerecord-jdbc-adapter (0.8.2) ** activerecord-jdbcmysql-adapter (0.8.2) ** activerecord-jdbcpostgresql-adapter (0.8.2) ** activerecord-jdbcsqlite3-adapter (0.8.2) ** jdbc-mysql (5.0.4) ** jdbc-postgres (8.2) ** jdbc-sqlite3 (3.5.8) ** warbler (0.9.10)
- database.yml を必要に応じて編集する
こんな感じでとりあえずは動いた。 けど mongrel の二倍位遅かった。
Posted in Ruby | コメントはありません |
RSpec で transaction のテスト
Yuya さんのヒントをもとにしてこんな風にしてみました。
sqlite3? は spec_helper に定義した。ヘルパーメソッド。 SQLite3 だとトランザクションの入れ子が出来なかった(例外が発生する)のでこうしてます。
一応 shouldnotreceive で特定の処理から先には進んでないことは確認しているし、 エラーメッセージも確認しているのでこれでテストとしては良さそう。
あとは、実装コードの最初の方で呼んでる処理をモック化すればいいと思う。
これをモック化すると、通しのテストはどうすればいいのだろう、というのが今の疑問。
Posted in Programming, Ruby | コメントはありません |
アンケートのデータ修正しました
http://q.okkez.net/ の第 28 回 Ruby/Rails 勉強会のアンケートで選択肢が英語になっていたデータを修正しました。
簡単なスクリプトを書いて script/console にコピペして実行した。 ちょっと複雑な修正なら SQL 書くより早いしわかりやすいね。
一部のデータがおかしくなってしまったのは SQL 書いて修正しましたけど。。。
多分、原因は私が使ってる Iceweasel に日本語言語パックをインストールしていなかったためだと思います。 次に同じようなミスがあった場合はすぐに修正できそうです。 r
Posted in Programming, Ruby | コメントはありません |
Ruby1.8.7 で Ruby on Rails が
動かない。
Ruby1.8.7/Rails2.0.2 で動かない。
[ruby-dev:34939] で解決したと思ったけど、やっぱり動かない部分がある。
ActiveScaffold で動的に作成した Controller が動かない。ちゃんと調べてないけど どうやら色々なものが Enumerable::Enumerator を返すようになったのが問題らしい。
ActiveScaffold にパッチあてるしかないのかな。
Posted in Programming, Ruby | コメントはありません |
RSpec で rollback のテストを行う方法
色々と調べたり試したりした結果、以下の方法で妥協することにした。
RAILS_ROOT/spec/spec_helper.rb をコピーして RAILS_ROOT/spec/rollback_spec_helper.rb を作成して、 use_transactional_fixtures = false にする。
これで、ファイルごとに実行するテストはうまくいくようになる。
この方法は簡単なんだけど、 rake spec や rake spec:rcov でテストを実行すると rollback 関連のテストが必ず失敗する。
もっとうまい方法はないのだろうか。
Posted in Programming, Ruby | 2 comments |
Passenger (mod_rails) を使ってみた
Overview — Phusion Passenger (a.k.a. mod_rails)
思ったより簡単だったのでちょっとだけ手順を書いておく。
- Apache は 2.2 系
- Rails2.0.2
- Redmine0.7.0RC1
上記はインストールできている and 動作確認できている前提で。 まずは、Passenger をインストール。
で以下のコマンドを実行。
そうすると対話型っぽい感じになって色々と親切に教えてくれる。足りないライブラリとそれらの入手方法とか。 個人的にはもう少し不親切でもいいような気がした。
このコマンドではApacheのモジュールをビルドするので Windows ではかなり苦労するであろう事が予想される。(調べてないけど)
最後に、httpd.conf に書く設定内容が表示されるのでそれをコピペして Apache を再起動すればOK。 各アプリの設定は後で書く。
もう一つのインストール方法でやる場合は、ソースを展開したディレクトリの下にビルドしてインストールされてしまうので、ちょっと気持ち悪い。手でコピーすればいいけどコマンドが動的に生成されるっぽいのでその辺の調整が必要。
### Redmine を使う
- /var/webapps/redmine に置いている
- /var/www/html が Apache の DocumentRoot
サブドメインが使える場合は以下でOK。
サブドメインが使えない場合(素朴なイントラネットなど)。
のようにシンボリックリンクを DocumentRoot 以下に用意する。 で、以下の内容を httpd.conf を追加する。
サブドメインが使える場合は NameBase の VirtualHost でいくらでもアプリケーションを置くことができるが、そうでない場合は以下のようにすればいけるかもしれない。(まだ試してない)
考えてみたけど VirtualHost を使用せずに一つのアプリに別々のRailsEnv を設置する方法がわからない。 上のやり方だと、一つの環境しか設定できないような気がするし。
以上の設定内容は全部、 Passenger のサイトに書いてあった。最初からドキュメントが揃っているのは素晴らしい!
Posted in Ruby | コメントはありません |
Older posts: 1 2