Typo のバグ

Posted by okkez Fri, 26 Sep 2008 13:19:00 GMT

コメントが有効になりました のコメントで指摘された件ですが、どうやら Typo のバグのようです。

RAILS_ROOT/config/routes.rb にあるルート定義を行っている方法が古いようです。

たぶん、名前付きのルートの部分を全面的に直さないといけない気がします。 とりあえず、上で指摘されていた部分は先頭(追加場所は未検証)

map.resources :articles

を追加すれば直りました。

本家にバグレポして直してもらう必要があるようです。

Posted in | コメントはありません |

nginx + thin or Apache + fcgi

Posted by okkez Mon, 15 Sep 2008 08:45:00 GMT

両方試した結果、しばらく後者で運用することにしました。

理由は以下。

  • サーバマシンのメモリが 256MB しかない
  • thin はプロセスごとの消費メモリが 50MB から 100MB 程度
  • Rails アプリを三つ動かしてるので thin のプロセスが多い (6プロセス)

そんな感じでメモリの消費が多くてスワップしまくりだったのが遅い原因でした。

Rails アプリで nginx + thin を使うときは thin のプロセス数 * 100MB を以上搭載するのが目安になりそうです。

Posted in | コメントはありません |

nginx + thin

Posted by okkez Mon, 01 Sep 2008 09:30:00 GMT

やってみた。

色々と試行錯誤した結果なんとか安定したのでその手順をメモしておく。

インストール

nginx からソースを落としてビルドする。

$ ./configure –prefix=/usr/local $ make $ sudo make install

Thin - yet another web server は RubyGems でインストールする。

$ sudo gem install thin eventmachine

設定

thin の設定はコマンドラインでサンプルファイルを生成して、 /etc/thin 以下へコピーするだけ。 サーバの数を増やしすぎると、パフォーマンスが悪くなるので程々にしておく。 うちの場合は Rails アプリが三つあるのでそれぞれに二つずつサーバを起動するようにした。

# 三つずつにした場合は極端にパフォーマンスが悪化した。

$ thin config -C thin.yml -s2 -S /tmp/thin-qa.sock -u www-data -g www-data $ vim thin.yml # 都合に合わせて編集する。 $ sudo cp thin.yml /etc/thin/ $ sudo thin install # /etc/init.d/thin を作成する

nginx の設定は Main - Nginx Wiki を参照して行う。

# 一部抜粋 # backend settings upstream thin-typo { server unix:/tmp/thin-typo.0.sock; server unix:/tmp/thin-typo.1.sock; } # virtual host settings # typo (blog) server { listen 80; server_name typo.okkez.net; access_log logs/typo.access.log main; root /home/kenji/ruby/typo/public; index index.html; location / { proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header Host $http_host; proxy_redirect off; # static files if (-f $request_filename){ break; } # rails caching if (-f $request_filename.html){ rewrite (.*) $1.html break; } # dynamic request if (!-f $request_filename){ proxy_pass http://thin-typo; break; } } }

移行

  • Apache の設定を変更 (Listen 8080 にする)
  • thin を起動
  • Apache を再起動
  • nginx を起動
  • 動作確認

以降の設定変更は気をつける。

  • thin -C 設定ファイル restart
  • kill -HUP nginx の pid (pid ファイルを参照) ** すぐには反映されないので注意する
  • Apache は普通に再起動する

はまったポイント

  • proxy の設定
  • rewrite の設定
  • 設定の再読み込みが出来ていなかったこと (kill -HUP pid)

疑問点

  • 特定のアプリで prototype.js の読み込みはすぐに終わるのにその後の動きが鈍い ** 読み込まなければ速い

Posted in , | コメントはありません |

mongrel-1.1.5-java と mongrel-1.1.5

Posted by okkez Fri, 29 Aug 2008 07:03:00 GMT

JRuby で mongrel を動かしたくて mongrel-1.1.5-java を入れたけど動かなかった。

それをそのまま放置していたら普通の Ruby で mongrel が動かなくて焦った。 mongrel-java を消したら解決したけど、焦った。

たぶん、原因はロードパスがおかしくなったことだと思う。

ちょっとこれ以上はわからない。。。

Posted in | コメントはありません |

JRuby on Rails with Tomcat

Posted by okkez Fri, 29 Aug 2008 02:31:00 GMT

とりあえず、動いたので手順だけ。

必要なもの。

  • 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 を必要に応じて編集する
$ cd $RAILS_ROOT $ warble config … config/warble.rb を編集する Warbler::Config.new do |config| config.dirs = %w(app config lib log vendor tmp) config.includes = FileList[“po/**/*.po”, “locale/**/*.mo”] config.gems << "activerecord-jdbcpostgresql-adapter" config.gem_dependencies = true config.webxml.rails.env = 'development' end ... $ warble ... カレントディレクトリに *.war が作成される ... $TOMCAT_ROOT/webapps 以下にコピーする ... tomcat を再起動する ... 以上

こんな感じでとりあえずは動いた。 けど mongrel の二倍位遅かった。

Posted in | コメントはありません |

RSpec で transaction のテスト

Posted by okkez Sun, 03 Aug 2008 15:36:00 GMT

Yuya さんのヒントをもとにしてこんな風にしてみました。

sqlite3? は spec_helper に定義した。ヘルパーメソッド。 SQLite3 だとトランザクションの入れ子が出来なかった(例外が発生する)のでこうしてます。

一応 shouldnotreceive で特定の処理から先には進んでないことは確認しているし、 エラーメッセージも確認しているのでこれでテストとしては良さそう。

あとは、実装コードの最初の方で呼んでる処理をモック化すればいいと思う。

これをモック化すると、通しのテストはどうすればいいのだろう、というのが今の疑問。

describe BatchController do describe "POST create" do describe "by login user" do describe "when posted data was invalid (subject)" do before do Question.should_not_receive(:create!) Choice.should_not_receive(:create!) unless sqlite3? ActiveRecord::Base.connection.should_receive(:rollback_db_transaction) end end before do login_as :quentin post :create, :batch => { :body => INVALID_DATA_WITHOUT_TITLE } end it "should have error message" do flash[:error].should == invalid data. end it "should redirect to ‘subject/index’" do response.should redirect_to(subjects_path) end end end end end

Posted in , | コメントはありません |

アンケートのデータ修正しました

Posted by okkez Fri, 01 Aug 2008 03:46:00 GMT

http://q.okkez.net/ の第 28 回 Ruby/Rails 勉強会のアンケートで選択肢が英語になっていたデータを修正しました。

簡単なスクリプトを書いて script/console にコピペして実行した。 ちょっと複雑な修正なら SQL 書くより早いしわかりやすいね。

一部のデータがおかしくなってしまったのは SQL 書いて修正しましたけど。。。

多分、原因は私が使ってる Iceweasel に日本語言語パックをインストールしていなかったためだと思います。 次に同じようなミスがあった場合はすぐに修正できそうです。 r

Posted in , | コメントはありません |

Ruby1.8.7 で Ruby on Rails が

Posted by okkez Fri, 06 Jun 2008 12:36:00 GMT

動かない。

Ruby1.8.7/Rails2.0.2 で動かない。

[ruby-dev:34939] で解決したと思ったけど、やっぱり動かない部分がある。

ActiveScaffold で動的に作成した Controller が動かない。ちゃんと調べてないけど どうやら色々なものが Enumerable::Enumerator を返すようになったのが問題らしい。

ActiveScaffold にパッチあてるしかないのかな。

Posted in , | コメントはありません |

RSpec で rollback のテストを行う方法

Posted by okkez Thu, 05 Jun 2008 15:36:00 GMT

色々と調べたり試したりした結果、以下の方法で妥協することにした。

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 , | 2 comments |

Passenger (mod_rails) を使ってみた

Posted by okkez Tue, 15 Apr 2008 13:58:00 GMT

Overview — Phusion Passenger (a.k.a. mod_rails)

思ったより簡単だったのでちょっとだけ手順を書いておく。

  • Apache は 2.2 系
  • Rails2.0.2
  • Redmine0.7.0RC1

上記はインストールできている and 動作確認できている前提で。 まずは、Passenger をインストール。

sudo gem install passenger

で以下のコマンドを実行。

passenger-install-apache2-module

そうすると対話型っぽい感じになって色々と親切に教えてくれる。足りないライブラリとそれらの入手方法とか。 個人的にはもう少し不親切でもいいような気がした。

このコマンドではApacheのモジュールをビルドするので Windows ではかなり苦労するであろう事が予想される。(調べてないけど)

最後に、httpd.conf に書く設定内容が表示されるのでそれをコピペして Apache を再起動すればOK。 各アプリの設定は後で書く。

もう一つのインストール方法でやる場合は、ソースを展開したディレクトリの下にビルドしてインストールされてしまうので、ちょっと気持ち悪い。手でコピーすればいいけどコマンドが動的に生成されるっぽいのでその辺の調整が必要。

### Redmine を使う

  • /var/webapps/redmine に置いている
  • /var/www/html が Apache の DocumentRoot

サブドメインが使える場合は以下でOK。

ServerName redmine.example.com DocumentRoot /var/webapps/redmine/public

サブドメインが使えない場合(素朴なイントラネットなど)。

ln -s /var/webapps/redmine/public /var/www/html/redmine

のようにシンボリックリンクを DocumentRoot 以下に用意する。 で、以下の内容を httpd.conf を追加する。

DocumentRoot /var/www/html RailsBaseURI /redmine

サブドメインが使える場合は NameBase の VirtualHost でいくらでもアプリケーションを置くことができるが、そうでない場合は以下のようにすればいけるかもしれない。(まだ試してない)

RailsBaseURI /redmine1 RailsBaseURI /redmine2

考えてみたけど VirtualHost を使用せずに一つのアプリに別々のRailsEnv を設置する方法がわからない。 上のやり方だと、一つの環境しか設定できないような気がするし。

以上の設定内容は全部、 Passenger のサイトに書いてあった。最初からドキュメントが揃っているのは素晴らしい!

Posted in | コメントはありません |

Older posts: 1 2