From a Far East Island

2009-06-05

[] メタプログラミングがわかって来た。

わかって来ると面白いね。

module Foo
  def self.included(base)
    p "#{base} included #{self}"
    base.extend(ClassMethods)
  end

  module ClassMethods
    def acts_as_greeting
      class_eval do
        include InstanceMethods
      end
    end
  end

  module InstanceMethods
    def shout
      p 'Hello Meta Programming World!!'
    end
  end
end

class BarBase
  include Foo
end

class Bar < BarBase
  acts_as_greeting
end

bar = Bar.new
bar.shout

2009-02-06

[]Mac Port を使った Ruby1.9インストール

sudo port install ruby19 +mactk

tk を使うのに、+mactk オプションが必要。

Port についてのメモはここ。詳細はここ

新規にインストールする際は、ここから最新版の MacPort をインストールする事。

2009-02-03

[][]ri-emacs.rbがRuby1.9で動作しないので作者にメールしてみた。

Ruby1.9正式版リリースおめでとうございます!!

というわけで、早速いろいろ試していると、emacs上でRIを表示するri-emacsが上手く動作しない様子。

調べてみると、lispからri-emacs.rbを実行している箇所でSyntax Errorが。

> /opt/local/lib/ruby1.9/site_ruby/ri-emacs.rb:97: syntax error, unexpected ':', expecting keyword_then or ',' or ';' or '\n'
>                               when ?.: nil
>                                       ^
> /opt/local/lib/ruby1.9/site_ruby/ri-emacs.rb:119: warning: else without rescue is useless
> /opt/local/lib/ruby1.9/site_ruby/ri-emacs.rb:236: syntax error, unexpected keyword_end, expecting $end

このエラー、Ruby1.8だと発生しない。

ri-emacs.rbの97行目、Case文のwhen で'then' ではなく':'を使用しているのが原因と判明。

(Ruby1.8までは':'と書けたのね、知らなかった。)

早速作者のKristof氏にメールした見たら、

> I'll change it soon.

との返事をもらいました。

すぐにでも使いたい人は、97, 98, 99 行目のwhenの':'を'then'に置き換えると実行できるようになるはずです。

Check it out!!

2007-12-26

[]RubyGemsを使ったRailsのインストールでの注意点

やっと時間が取れたのでRuby on Railsのインストールに挑戦。

ところがRubyGemsを使ってRailsをインストールする所で手こずる。

$ sudo gem install rails --include-dependencies

このコマンドを実行するが、以下のエラーが帰って来た。

/opt/local/lib/ruby/vendor_ruby/1.8/rubygems/custom_require.rb:27:in `gem_original_require': no such file to load -- sources (LoadError)
	from /opt/local/lib/ruby/vendor_ruby/1.8/rubygems/custom_require.rb:27:in `require'
	from /opt/local/lib/ruby/vendor_ruby/1.8/rubygems/source_info_cache.rb:6
	from /opt/local/lib/ruby/vendor_ruby/1.8/rubygems/custom_require.rb:27:in `gem_original_require'
	from /opt/local/lib/ruby/vendor_ruby/1.8/rubygems/custom_require.rb:27:in `require'
	from /opt/local/lib/ruby/vendor_ruby/1.8/rubygems/remote_installer.rb:12
	from /opt/local/lib/ruby/vendor_ruby/1.8/rubygems/custom_require.rb:27:in `gem_original_require'
	from /opt/local/lib/ruby/vendor_ruby/1.8/rubygems/custom_require.rb:27:in `require'
	from /opt/local/lib/ruby/vendor_ruby/1.8/rubygems.rb:112:in `manage_gems'
	from /opt/local/bin/gem:10

どうもsourceという名のファイルが無いというエラーのようだ。探しまわったあげくに、/opt/local/lib/ruby/gems/gems/sources-0.0.1/lib にsource.rbというファイルが有るのを発見。ファイルが有るが見えてないという状態のようだ。

このディレクトリにRubyのロードパスを通してやる事で解決した。Rubyのロードパスは、シェル変数RUBYLIBに追加したいパスを記述する事で設定できる。私の場合は、bashなのだが、以下の2行を .bashrcに追加。

RUBYLIB=/opt/local/lib/ruby/gems/gems/sources-0.0.1/lib
export RUBYLIB

これで、gemのinstallコマンドが実行でき、Railsを無事インストールする事ができた。

残る疑問は、どうしてこの手順が必要だったのかと言うこと。

RubyGemsは、MacPortを利用してインストールした。このRubyGemsのインストールの工程としてRubyのロードパスにこのsource.rbへのパスが設定されるべきだったのか。それとも、このsource.rbは、Rubyのロードパスが通ったディレクトリにコピーして使う物だったのか。

2007-12-19

[]MacにRailsをゼロからインストールする一番簡単な方法:江島健太郎 / Kenn's Clairvoyance - CNET Japan

Kennさんの所で、Railsのインストール方法について紹介されていました。

http://japan.cnet.com/blog/kenn/2007/12/19/entry_25003169/?ref=rss

しかーし、私も最近Railsのインストール方法を漁っていた所で、簡単さで言ったらこんなのも有るのを発見。

Locomotive

http://locomotive.raaum.org/

ただ、Mac以外で運用するのに一般的にUnixでの運用方法が知っておくべきだと思って、こっちではなくコマンドでインストールする方法に挑戦中。