比嘉さんからciteされたみたいなので、取り急ぎ新しい情報を吐き出しておこうと思います。

そろろろRailsについて本音を書いてみるか

後、デバッグの環境は、Javaに比べて貧弱だと思う。Railsでデバッグをする7つの方法を見てほしい。IDEでソースにブレークポイントを設定(ソースコードを書き換えるのではなく)して、ステップイン、ステップオーバー、メモリの状態を見たりなんてのに慣れているJavaから比べると、すっごく大変に見える。

喜ばしいことに、Rails 2.0ではruby-debugを使ったdebuggerが正式に採用されました。 これの使い方は非常に簡単です。

まずは、以下のようにブレークポイントをコード中に書き込みます。

   1  def some_method
   2    debugger # breakpoint
   3  end

続いて、Webサーバをデバッグモードで実行します。

   1  % ./script/server -u

これだけです。あとは、実際にブレークポイントを仕掛けた 場所が実行されるようにすれば、gdbライクなruby-debugの セッションが開始されます。 ruby-debugは、gdbと同じように、ステップ実行、ステップオーバー等の逐次実行を行うインターフェイスがあるので、 コードの動作を確認しながらデバッグを行うことができます。

gdbになれていない人には、irbコマンドを実行することで、 その場でirbを立ち上げることができます。これは非常に便利ですね。

参考までに、debuggerから実行できるコマンドのリストを 載せておきます。

   1  backtrace break catch cont delete display down eval exit finish frame help irb list method next p pp quit reload restart save script set step thread trace undisplay up var where

Have a good debugging life!

See Also

更新履歴

  • 2008/01/21 See Alsoに1点追加
posted by Png genki on Fri 11 Jan 2008 at 22:21

cache_fuやmemcachedを使うときに、cacheメソッドがオプションを 受け取ってくれないので不便だなと思っていたのですが、 EdgeRailsでは以下のようなパッチが当たっていて この問題は解決されているようです。

[PATCH] Rails have poor support to work with memcached

Let's assume we have a caching installation with Nginx used as a frontend. Nginx attempts to get page body by key from memcached. If it succeeds (meaning that the page is in memcached), Rails doesn't get control, making this schema extremely fast, up to 3K requests per second. In case memcached doesn't contain cached page by url as a key, Rails receive control, render page and cache it in memcached in order for the next request to be retrieved from memcached.

現状のリリースバージョンのコードでは、以下のようになっています。

vendor/rails/actionpack/lib/action_view/helpers/cache_helper.rb

   1  def cache(name = {}, &block)
   2    @controller.cache_erb_fragment(block, name)
   3  end

これが、EdgeRailsでは以下のように変更されています。

vendor/rails/actionpack/lib/action_view/helpers/cache_helper.rb

   1  def cache(name = {}, options = nil, &block)
   2    template_extension = first_render[/\.(\w+)$/, 1].to_sym
   3   
   4    case template_extension
   5    when :erb, :rhtml
   6      @controller.cache_erb_fragment(block, name, options)
   7    when :rjs
   8      @controller.cache_rjs_fragment(block, name, options)
   9    when :builder, :rxml
  10      @controller.cache_rxml_fragment(block, name, options)
  11    else
  12      # do a last ditch effort for those brave souls using
  13      # different template engines. This should give plugin
  14      # writters a simple hook.
  15      unless @controller.respond_to?("cache_#{template_extension}_fragment")
  16        raise "fragment caching not supported for #{template_extension} files."
  17      end
  18   
  19      @controller.send!("cache_#{template_extension}_fragment", block, name, options)
  20    end
  21  end

posted by Png genki on Fri 11 Jan 2008 at 05:48
Contents
Rails 2.0でデバッグをする新しいやり方
Rails 2.0.2のcacheメソッドはoptionsを受け取らない
Comments
dsjf: https://gist.github.com/6bf1bf2c3cbb5eb6e7a7 これ... '13-1
瀧内元気: おお、チェックしてみます。thx! '11-12
overisland: Reeder for iPhone もこの UI を実装していますね。 '11-12
瀧内元気: その情報は見たのですが、以下のサイトによると、現在はまた必要になってるっぽいんですよね。 ... '11-12
tkawa: http://devcenter.heroku.com/articles/rails31_he... '11-12
Services from s21g
twpro(ツイプロ)
Twitterプロフィールを快適検索
地価2009
土地の値段を調べてみよう
MyRestaurant
自分だけのレストラン手帳
Formula
ブログに数式を埋め込める数式コミュニティ