何気なくTwitterのタイムラインを見ていたら、 wycatsとd2hがMerbがRails3にマージされるというお知らせをしてました。

Rails And Merb Merge

Today is a fairly momentous day in the history of Ruby web frameworks. You will probably find the news I’m about to share with you fairly shocking, but I will attempt to explain the situation.

Merb gets merged into Rails 3!

It’s christmas, baby, and do we have a present for you. We’re ending the bickering between Merb and Rails with a this bombshell: Merb is being merged into Rails 3!

確かに最近Railsが急速にMerb化してきてる気がするなと思ってたのですが。 save!のポリシーがどういう感じにmergeされるのかが気になる所。

Updates

#merbを見ていて分かった事など。

  • "any app can be a slice" 全てのアプリケーションがsliceとして利用可能らしい。てことはRails3にはsliceが入るっぽいですね。
  • "we're going to have a rails-core which is basically merb-core" merb-coreをベースとしてrails-coreを作るらしい。
  • "goal is beta by RailsConf" 次のRailsConfまでにβを出すのが目標。
  • "rails JS helpers become modular" RJSはモジュールかされて標準添付からは追い出される。
  • "DM definitely will be first-class. Just because AR is the default, doesn't mean DM shouldn't be just as easy to use." ARが標準のORMとなるが、DMも同等のサポートを受ける。
  • 依然としてtest/unitがデフォルト。これを機にRSpecが標準になったら良かったのだけど。
  • "get all the specific js code out of the view" JSはviewに書かないスタイルになる。
  • "Rails 3 will definitely have some incompatibilities with Rails 2.x" Rails 3が2.xとの互換性を保つのは難しそう。

全体的な印象として、MerbをベースにRailsを作り直す(ビッグバンリライトする→ビッグバンリライトではないと書いてた。notを読み落としてました。thanks @moro)ような感じがします。

See Also

posted by Png genki on Wed 24 Dec 2008 at 05:04 with 2 comments

capistranoには、以下のコマンドを実行する事で、メンテナンスページを用意する機能があります。

   1  % cap deploy:web:disable

コマンドを実行すると、デプロイ先のサーバ上で、shared/system/maintenance.html が生成されます。 shared以下のディレクトリは、public/の下にシンボリックリンクが作成されるので、 結果としてpublic/system/maintenance.htmlが準備される事になります。

しかし、capistranoがやってくれるのはここまでなので、 maintenance.htmlが存在した場合にそれを表示するようにするように、 Webサーバを設定する作業は自分でやる必要があります。 mod_railsとかでその辺まで面倒みてくれる感じになっていると楽なんですけどね。

その設定については、Apacheを使っている場合は以下のような感じにすればOKです。

   1  RewriteEngine On
   2  RewriteCond %{DOCUMENT_ROOT}/system/maintenance.html -f
   3  RewriteCond %{REQUEST_URI} !^/images/
   4  RewriteCond %{REQUEST_URI} !^/javascripts/
   5  RewriteCond %{REQUEST_URI} !^/stylesheets/
   6  RewriteRule ^.*$ /system/maintenance.html [L]
   7  RewriteRule ^/(images|javascripts|stylesheets)/(.*)$ /$1/$2 [L]

ちなみに、メンテナンスページを取り下げるには、以下のコマンドを実行します。

   1  % cap deploy:web:enable

これで、maintenance.htmlが削除されます。

See Also

posted by Png genki on Tue 23 Dec 2008 at 16:47

技術評論社さまよりWeb+DB PRESS vol.48を献本いただきました。 ありがとうございます。

WEB+DB PRESS Vol.48
WEB+DB PRESS Vol.48
posted with amazlet at 08.12.22
WEB+DB PRESS編集部 編
技術評論社
売り上げランキング: 280

特集のPostgreSQLで大規模運用を実現するコツが興味深かったです。

posted by Png genki on Mon 22 Dec 2008 at 10:00
  • 18:40より会場設営
  • 19:00開始。まずは自己紹介。Merbと私。聞きたいこと。
  • DataMapperとActiveRecordの比較
  • MerbとRailsの比較
  • その他色々とMerb談義

参考資料

posted by Png genki on Fri 19 Dec 2008 at 17:29 with 7 comments

僕はMerbではDataMapperを使うのがお勧めだと思いますが、 DataMapperで利用可能なpropertyの型をまとめておきます。

  • TrueClass, Boolean
  • String
  • Text (デフォルトでは65536バイト)
  • Float
  • Integer
  • BigDecimal
  • DateTime
  • Date
  • Time
  • Object (マーシャル/アンマーシャルされる)
  • Class (Stringと同様に扱われる)

基本的には、

   1  property :name, Type[, options]

という感じで利用します。

optionsとしては、Hashの形式で以下のようなものが指定出来ます。

  • :accessor, :reader, :writer => :private, :protected, :public
  • :nullable => true
  • :default => value
  • :lazy => true, false (遅延読み込みのオン/オフ)
  • :key => true (Model[key]でアクセスできるようになる)
  • :index => true, "name" (インデックスを作成)
  • :size => length (テキストの長さなど)
  • and so on...

See Also

posted by Png genki on Fri 19 Dec 2008 at 15:28

Merb勉強会の参考資料としてMerbの思想的なものをまとめておきます。

1. alias_method_chain is evil

Rails流のalias_method_chainによる機能拡張や改変はよろしくないという立場で、代わりにあらかじめhookをちゃんと提供しようという感じみたいです。

例)

   1  Merb::BootLoader.before_app_loads do
   2    # do something
   3  end

2. APIを用意する

MerbにはAPIが用意されていて、以下の三つのカテゴリに分かれているようです。

  • @public 次のメジャーバージョンアップまで変化しない事が保証される。
  • @private Merbコンポーネント開発者向け?
  • @plugin プラグイン開発者向け。

Merbのソースをみると、@publicや@privateなどとメソッドのコメントに書かれています。

posted by Png genki on Fri 19 Dec 2008 at 13:39

昔からあったような気がするのですが、 つい最近までその存在に気がついてませんでした。

   1  % sudo gem update merb

これで、merb関連のgemを一括で最新バージョンにアップデートする事が出来ます。

posted by Png genki on Fri 19 Dec 2008 at 13:06

しばらくMerb-1.0.3を使ってたのですが、Merb-1.0.6.1にアップデートした所、以下のようなエラーが出たので原因を調査していました。

   1  MERB_ROOT/slices/merb-auth-slice-activation/lib/merb-auth-
   2  slice-activation.rb:5:in `load_dependency': wrong number of arguments (1 for 2) 
   3  (ArgumentError)

どうやらload_dependencyの第二引数が省略出来なくなったらしい。

merb-core-1.0.3/lib/merb-core/core_ext/kernel.rb

   1    def load_dependency(name, *ver, &blk)    dep = name.is_a?(Gem::Dependency) ? name : track_dependency(name, *ver, &blk
   2  )
   3      gem(dep)
   4    rescue Gem::LoadError => e
   5      Merb.fatal! "The gem #{name}, #{ver.inspect} was not found", e
   6    ensure
   7      begin
   8        require dep.require_as
   9      rescue LoadError => e
  10        Merb.fatal! "The file #{dep.require_as} was not found", e
  11      end
  12  
  13      if block = dep.require_block
  14        block.call
  15      end
  16      Merb.logger.verbose!("loading gem '#{dep.name}' ...")
  17      return dep # ensure needs explicit return
  18    end

これに対して、

merb-core-1.0.6.1/lib/merb-core/core_ext/kernel.rb

   1    def load_dependency(name, clr, *ver, &blk)
   2      begin
   3        dep = name.is_a?(Gem::Dependency) ? name : track_dependency(name, clr, *ve
   4  r, &blk)
   5        return unless dep.require_as
   6        Gem.activate(dep)
   7      rescue Gem::LoadError => e
   8        e.set_backtrace dep.original_caller
   9        Merb.fatal! "The gem #{name}, #{ver.inspect} was not found", e
  10      end
  11  
  12      begin
  13        require dep.require_as
  14      rescue LoadError => e
  15        e.set_backtrace dep.original_caller
  16        Merb.fatal! "The file #{dep.require_as} was not found", e
  17      end
  18  
  19      if block = dep.require_block
  20        block.call
  21      end
  22  
  23      Merb.logger.verbose!("loading gem '#{dep.name}' ...")
  24      return dep # ensure needs explicit return
  25    end

第二引数のclrが省略出来なくなった模様。 private APIはメジャーバージョンアップじゃなくても仕様変わるのか。

#merbで聞いてみた所、1.0.4から以下のように明示的に指定するようになったらしい。

   1  load_dependency 'merb-slices', :immediate => true

詳しくは http://wiki.merbivore.com/releases/1.x/known_issues 参照のこと。

教えてくれたcarpeliamありがとう!

See Also

posted by Png genki on Fri 19 Dec 2008 at 04:08

GitX は、MacOSXで使えるGit用のGUIツールです。

ss1

基本的にはCUIで操作してるのですが、 これを使うとブランチのマージの様子などが視覚的に追えて便利。

アバター画像はメールアドレスから gravatar経由で持ってきてるんですね。 賢い。

See Also

posted by Png genki on Fri 19 Dec 2008 at 02:29

カウボーイ忘年会の二次会で色々お話ししてくださった、 神谷 さんから教えてもらったのですが、MEMS(Micro Electro Mechanical Systems)という技術がなかなか凄い事になっているようです。

ものすごく小さいバネが形成されています。

歯車。

See Also

posted by Png genki on Thu 18 Dec 2008 at 13:59