query: tag:edge

githubのリポジトリから持ってきた
edge merb
に含まれているパッケージは、
以下の通り。

pre>>
merb-1.0.gem
merb-action-args-1.0.gem
merb-assets-1.0.gem
merb-auth-core-1.0.gem
merb-auth-more-1.0.gem
merb-auth-slice-password-1.0.gem
merb-auth-1.0.gem
merb-cache-1.0.gem
merb-core-1.0.gem
merb-exceptions-1.0.gem
merb-gen-1.0.gem
merb-haml-1.0.gem
merb-helpers-1.0.gem
merb-mailer-1.0.gem
merb-param-protection-1.0.gem
merb-slices-1.0.gem
merb_datamapper-1.0.gem
<<--

merb_datamapperは野良扱いだ。

posted by genki genki on Sat 27 Dec 2008 at 19:32 with 0 comments

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

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

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

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

ruby>>
def load_dependency(name, *ver, &blk) dep = name.is_a?(Gem::Dependency) ? name : track_dependency(name, *ver, &blk
)
gem(dep)
rescue Gem::LoadError => e
Merb.fatal! "The gem #{name}, #{ver.inspect} was not found", e
ensure
begin
require dep.require_as
rescue LoadError => e
Merb.fatal! "The file #{dep.require_as} was not found", e
end

if block = dep.require_block
  block.call
end
Merb.logger.verbose!("loading gem '#{dep.name}' ...")
return dep # ensure needs explicit return

end
<<--

これに対して、

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

ruby>>
def load_dependency(name, clr, *ver, &blk)
begin
dep = name.is_a?(Gem::Dependency) ? name : track_dependency(name, clr, *ve
r, &blk)
return unless dep.require_as
Gem.activate(dep)
rescue Gem::LoadError => e
e.set_backtrace dep.original_caller
Merb.fatal! "The gem #{name}, #{ver.inspect} was not found", e
end

begin
  require dep.require_as
rescue LoadError => e
  e.set_backtrace dep.original_caller
  Merb.fatal! "The file #{dep.require_as} was not found", e
end

if block = dep.require_block
  block.call
end

Merb.logger.verbose!("loading gem '#{dep.name}' ...")
return dep # ensure needs explicit return

end
<<--

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

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

ruby>>
load_dependency 'merb-slices', :immediate => true
<<--

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

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

See Also

posted by genki genki on Fri 19 Dec 2008 at 03:48 with 0 comments

Asakusa.rb会場で学んだ事をメモしていきます。

RubyのリポジトリはSVNで提供されていますが、
Git使い的には、以下のようにgit svn cloneでもってきます。

pre>>
% git svn clone http://svn.ruby-lang.org/repos/ruby -T trunk -r 20630
<<--

上記のようにリビジョン番号を指定するのが得策です。

とってきたら、まずは

pre>>
% autoconf
% ./configure
(snip)
version.h:29:22: error: revision.h: No such file or directory
<<--

というエラーが出るので、以下のようにrevision.hを作成します。

revision.h

c>>
#define RUBY_REVISON 20630
<<--

そしておもむろに

pre>>
% make
<<--

これでOK. trunkのrubyが出来上がります。

posted by genki genki on Thu 11 Dec 2008 at 19:47 with 0 comments

SQLのログを見ていて気がついたのですが、
最近のActiveRecordは以下のようにEagerLoadingしようとすると、
こんな感じのSQLを発行します。

rails>>
?> Article.find(:all, :include => [:user => :face]);1
=> 1

Article Load (0.005234) SELECT * FROM articles
User Load (0.000645) SELECT * FROM users WHERE (users.id IN ('13','9','37','17','1','3'))
Face Load (0.002931) SELECT faces.* FROM faces WHERE (faces.user_id IN (1,3,9,13,17,37))
<<--

以前のようにJOINを使わずに、3回に分けるようになっているのですね。

しかしながら、条件が複雑になってくると、
:limitオプションとの相性が悪いケースがあるようで、
まだ若干バグがあるようです。
そんな時は手で:joinsを書いています。

posted by genki genki on Sun 3 Aug 2008 at 22:11 with 0 comments

Rails is moving from SVN to Git

We’ve been preparing for Rails to move the official source repository from Subversion to Git for some time now and it seems that it’ll happen over the next week or so. The premiere will happen alongside the official launch of Github.

Rails界隈ではGit化が進んでいましたが、とうとうRails本体もGitに移行する模様です。
ついでにチケット管理システムもTracからLighthouseに移行するらしい。

さて、そろそろ
Git - SVN Crash Course
を読んでSVNからGitに移行する潮時かなあ。

posted by genki genki on Thu 3 Apr 2008 at 07:27 with 0 comments

Rails 2.1がどんな感じになるのか、面白そうな記事があったので紹介します。

A taste of what's coming in Rails 2.1

Rails 2.1 is not far off the horizon and we’ve been adding a ton of extra deliciously nice goodies in preparation of its release lately.

個人的にはCache周りのネタが気になりました。

What's New in Edge Rails: Pluggable Controller Caching

ふむふむ。

posted by genki genki on Wed 2 Apr 2008 at 11:42 with 0 comments

EdgeRailsでRuby 1.9対応のチケットが流れ出してますね。
そしてこれ。

Changeset [9187]: Ruby 1.9: no args is 0 arity, not -1 as in 1.8

Ruby 1.9: no args is 0 arity, not -1 as in 1.8

へーなるほど。RailsのEdgeを見ているとRuby 1.9対応のポイントが分かって面白いです。

posted by genki genki on Wed 2 Apr 2008 at 07:04 with 0 comments

ようやくこの日が来ましたね。

Changeset 9067

Add has_one :through support. #4756 [thechrisoshow]

yuguiさんの
has_one :through
の頃からだから、実に1年半以上の時間がかかったわけですね。感慨深い。

See Also

posted by genki genki on Sat 22 Mar 2008 at 18:01 with 0 comments

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

rails>>
def cache(name = {}, &block)
@controller.cache_erb_fragment(block, name)
end
<<--

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

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

rails>>
def cache(name = {}, options = nil, &block)
template_extension = first_render[/.(\w+)$/, 1].to_sym

case template_extension
when :erb, :rhtml
@controller.cache_erb_fragment(block, name, options)
when :rjs
@controller.cache_rjs_fragment(block, name, options)
when :builder, :rxml
@controller.cache_rxml_fragment(block, name, options)
else
# do a last ditch effort for those brave souls using
# different template engines. This should give plugin
# writters a simple hook.
unless @controller.respond_to?("cache_#{template_extension}_fragment")
raise "fragment caching not supported for #{template_extension} files."
end

@controller.send!("cache_#{template_extension}_fragment", block, name, options)

end
end
<<--

posted by genki genki on Fri 11 Jan 2008 at 05:52 with 0 comments