backgroudrbを使ってみる

  • WebDBPressのvol40のRuby on Rails本格活用を参考にサンプル的に実行してみる
  • サンプルコードを書いてみて、テストを実行してみる
  • 例外が出てアチャー

1) Error:
test_all_clawl(MyFeedTest):
NoMethodError: undefined method `[]' for #
(druby://localhost:22222) /xxxxxxxxxxxxxxxxxxxxxxxxx/trunk/vendor/plugins/backgroundrb/backgroundrb.rb:50:in `new_worker'
(druby://localhost:22222) /xxxxxxxxxxxxxxxxxxxxxxxxx/trunk/vendor/plugins/backgroundrb/backgroundrb.rb:49:in `synchronize'
(druby://localhost:22222) /xxxxxxxxxxxxxxxxxxxxxxxxx/trunk/vendor/plugins/backgroundrb/backgroundrb.rb:49:in `new_worker'
/xxxxxxxxxxxxxxxxxxxxxxxxx/trunk/app/models/my_feed.rb:26:in `crawl'
/xxxxxxxxxxxxxxxxxxxxxxxxx/trunk/app/models/my_feed.rb:35:in `all_crawl'
/xxxxxxxxxxxxxxxxxxxxxxxxx/trunk/app/models/my_feed.rb:34:in `each'
/xxxxxxxxxxxxxxxxxxxxxxxxx/trunk/app/models/my_feed.rb:34:in `all_crawl'
./my_feed_test.rb:108:in `test_all_clawl'
/xxxxxxxxxxxxxxxxxxxxxxxxx/trunk/vendor/rails/activerecord/lib/../../activesupport/lib/active_support/testing/default.rb:7:in `run'

I believe that if you are passing any model objects as args to your
worker, you need this line somewhere in you model's class definition:

include DRbUndumped

hth,

なるほど。workerにモデルを受け渡すときは、モデルに特別な指定が必要とのこと。
呼び出し部分。feed_providerというモデルのオブジェクトを受け渡している。

 27     MiddleMan.new_worker (:class => :feed_crawler_worker,:args =>
 28                           {:id => self.id,:feed_provider => @feed_provider})

クラス定義で、DRbUndumpedをincludeする。

  5 module FeedProvider
  6
  7   class Base
  8   include DRbUndumped

これで実行することで、上記のエラーは解消された。

複数ファイルに一括で処理する

  • バッファに複数ファイルを開く複数ファイルを開く
  • 現在のバッファすべてに対して処理を実行する。

以下は、app/以下の.rbファイルを、すべてutf-8に変換して保存する例。

vim app/**/*.rb    
:bufdo set fileencoding=utf-8 | :w

(追記)argdoを使う解法

ka-nacht さんから、この場合はargdoを使ったほうがよいと指摘をいただきましたので、メモ。

vim .
:args app/**/*.rb    
:argdo set fileencoding=utf-8 | :w

:w ではなく、updateを使うと、ファイル内容に変更があった場合だけ記録してくれる。
参考:
http://advweb.seesaa.net/article/6820434.html

text_field_tagのサイズを指定する

railsで使用する、text_fieldの入力領域変更など、HTMLの指定をするには、3つ目の引数に渡す。

例、その1

  <%= text_field_tag :url, '' ,:size => '80' %>

このerbの記述は、こうHTMLに展開される。

<input id="url" name="url" size="80" value="" type="text">

例、その2

  <%= text_field_tag :url, 'default' ,{ :size => '80',:maxlength => '10' } %>

このerbの記述は、こうHTMLに展開される。

<input id="url" maxlength="10" name="url" size="80" type="text" value="default" />

java6のインストール

新規環境変数として
JAVA_HOME=C:\Program Files\Java\jdk1.6.0_06
環境変数Pathの末尾に%JAVA_HOME%\bin
を追加

  • 確認
c:\>java -version
java version "1.6.0_06"
Java(TM) SE Runtime Environment (build 1.6.0_06-b02)
Java HotSpot(TM) Client VM (build 10.0-b22, mixed mode, sharing)

'/'の示すindexページを、public/index.html以外のページに設定する

  • 前提
rails -v 
Rails 2.0.2
  • やりかた
    • config/routes.rb
  # You can have the root of your site routed with map.root -- just remember to delete public/index.html.
  # map.root :controller => "welcome"

ここのmap.root :controllerを設定して、
public/index.htmlをデリートすればおk。
(public/index.htmlが残っていると、そちらが優先される)