2009年2月 6日 (金)

『プログラミング言語Ruby』出版記念トークに行ってきた

日付が変わって昨日になってしまいましたが、大阪ジュンク堂本店の『プログラミング言語Ruby』出版記念トークに行ってきました。
仕事の関係で、遅れて19:30ごろ到着しました。会場はすでに満員でした。

Abcd0001

著者のまつもとゆきひろさんと監修の卜部昌平さんのトークセッション。
本の解説に交えてRuby開発の様々な経緯を聞くことが出来て楽しかったです。

質問では、「まつもとさんが考えるRuby2.0とはどんなものですか?」という興味深いモノがあり、まつもとさんは今日書き留めたという構想を披露してくださいました。まだまだRubyでやりたいことがたくさんあるみたいです。

さて、肝心の本。まあ当然買うつもりで言ったわけですがサイン会があるとのことで並んでサインしていただきました。失礼かと思いながら写真をお願いしたところ、快諾いただき一緒に撮らさせて頂きました。

Ts3e0239

監修の卜部さんともご一緒に。

Ts3e0240

いや~、よい記念になりました。
その後懇親会もあったようですが、残念ながら用事があったため行けませんでした。

帰りの電車の中で、ざっと読み流してみましたが、けっこう突っ込んだ内容であるわりに読みやすい感じだと思いました。よくまとまっているというか。サンプルコードもたくさん掲載されているのでコードを動かしながら学習していくのがいいかもしれません。休日にでもゆっくりサンプルを試してみたいもんですねぇ。1.8と1.9の違いもポイントごとによく解説されています。

これからRubyを始めたいプログラマ。より深くRubyを理解したい方におすすめです。

プログラミング言語 Ruby Book プログラミング言語 Ruby

著者:まつもと ゆきひろ,David Flanagan
販売元:オライリージャパン
Amazon.co.jpで詳細を確認する

 

| | コメント (0) | トラックバック (0)

2008年2月27日 (水)

AcriveRecordをさわってみる その4

一対多をやったからには多対多。ということで。

ActiveRecordで簡単に多対多を実現するには、関連付けるテーブルのIDのみからなるコントロールテーブルを間に入れます。

ためしに前回のarticlesの記事にカテゴリを関連付けてみましょう。記事はカテゴリを複数持ち、カテゴリは複数の記事を持つ。多対多の関係です。

データベースにcategoriesテーブルとassignsコントロールテーブルを追加します。
---
> sqlite3 data.db
sqlite> create table categories(id integer primary key, name string);
sqlite> create table assigns(article_id integer, category_id integer);
sqlite> insert into categories values(null, "economy");
sqlite> insert into categories values(null, "government");
sqlite> insert into categories values(null, "computer");
sqlite> insert into assigns values(1, 1);
sqlite> insert into assigns values(1, 2);
sqlite> insert into assigns values(2, 3);
sqlite> insert into assigns values(1, 3);
sqlite> insert into assigns values(3, 3);
sqlite> .quit
---

assingsテーブルのデータで記事とカテゴリのIDを関連付けています。

これを表示するスクリプトは以下のとおり。
ar5.rb
===
#!/usr/bin/ruby

require 'rubygems'
require 'active_record'

#DB接続
ActiveRecord::Base.establish_connection(
  :adapter => 'sqlite3',
  :database => 'data.db'
)

# articlesテーブル
class Article < ActiveRecord::Base
  has_and_belongs_to_many :categories, :join_table => 'assigns'
end

# authorsテーブル
class Category < ActiveRecord::Base
  has_and_belongs_to_many :articles, :join_table => 'assigns'
end

#記事とコメントを全て表示
Article.find(:all).each{ |article|
  article.categories.find(:all).each{ |category|
    if !category.nil?
      p "#{article.article}|#{category.name}"
    end
  }
}
===

前回のar4.rbと違う部分を赤字で記載しています。
実行すると以下のようになります。
---
>ruby ar5.rb
"Hello World!|economy"
"Hello World!|government"
"Hello World!|computer"
"Konnichiha Sekai!|computer"
"Hello Ruby ActiveRecord!|computer"
---

以上のように、多対多の関係も非常に簡潔に記述できます。
最初に書いたように、ActiveRecordにある程度親しんでからRailsを学ぶと開発もスムーズにはいれるかもしれません。

| | コメント (0) | トラックバック (0)

2008年2月24日 (日)

AcriveRecordをさわってみる その3

一対一をやったからには、一対多もやらないとな。
というわけで今回は一対多をやってみます。

まずは、前回のcommentsテーブルにレコードを追加します。
---
> sqlite3 data.db
sqlite> insert into comments values(null, 1, "How are you?");
sqlite> .quit
---

article_idカラムが1のデータを追加したので、articlesテーブルのid=1の記事は2つ目のコメントを持つことになりました。

このデータを参照するコードは以下のとおり。
前回のar3.rbのちょこっと改造版です。
ar4.rb
===
#!/usr/bin/ruby

require 'rubygems'
require 'active_record'

#DB接続
ActiveRecord::Base.establish_connection(
  :adapter => 'sqlite3',
  :database => 'data.db'
)

# articlesテーブル
class Article < ActiveRecord::Base
  has_many :comments
end

# authorsテーブル
class Comment < ActiveRecord::Base
  belongs_to :article
end

#記事とコメントを全て表示
Article.find(:all).each{ |article|
  article.comments.find(:all).each{ |comment|
    if !comment.nil?
      p "#{comment.article.article}|#{comment.comment}"
    end
  }

}

puts '---'

#Commentクラスで全て表示
Comment.find(:all).each{ |comment|
  p "#{comment.article.article}|#{comment.comment}"
}

===

ar3.rbと異なる部分を赤字で記載しています。
データの検索はArticleクラス、Commentクラスで2回行っています。
実行すると、
---
>ruby ar4.rb
"Hello World!|Nice to meet you"
"Hello World!|How are you?"
"Konnichiha Sekai!|Hajime mashite!"
---
"Hello World!|Nice to meet you"
"Konnichiha Sekai!|Hajime mashite!"
"Hello World!|How are you?"
---

データは同じですが、順番が違いますね。

Articleクラスにhas_manyを定義することで、一対多を実現しています。シンボルが複数形になっていることに注意してください。

このように、規約を守っていればとても簡単にデータ問合せができます。
長ったらしいSQL文を書かなくていいだけでもActiveRecordは便利に思えます。
個人的にはコードの一行が短くなるのがうれしいですね。

| | コメント (0) | トラックバック (0)

2008年2月21日 (木)

AcriveRecordをさわってみる その2

毎日更新の試みも後半戦にはいっていますが、もう毎日ネタさがしがしんどいです。。。
こういう時には「Tipネタ小出し」という姑息な手段に出ることにしましたw

先日ActiveRecordをちょっとだけさわってみましたが、もう少し理解を進めてみましょう。
2つのテーブルで一対一の関係をつくって操作してみます。

まずは、前回のデータベースに新しいテーブルを作ります。
---
> sqlite3 data.db
sqlite> create table comments(id integer primary key, article_id integer,comment string);
sqlite> insert into comments values(null, 1, "Nice to meet you");
sqlite> insert into comments values(null, 2, "Hajime mashite!");
sqlite> .quit
---

記事に対するコメントを格納するテーブル、ということにしました。
article_idカラムがarticlesテーブルのidと関連を持ちます。

これらのテーブルを一対一で関連付けてデータを参照してみましょう。
ar3.rb
===
ar3.rb
===
#!/usr/bin/ruby

require 'rubygems'
require 'active_record'

#DB接続
ActiveRecord::Base.establish_connection(
  :adapter => 'sqlite3',
  :database => 'data.db'
)

# articlesテーブル
class Article < ActiveRecord::Base
  has_one :comment
end

# authorsテーブル
class Comment < ActiveRecord::Base
  belongs_to :article
end

#コメントを持っている記事を表示
Article.find(:all).each{ |article|
  if !article.comment.nil?
    p "#{article.article}|#{article.comment.comment}"
  end
}

===

プログラムを実行すると、コメントが付いている記事のみを表示します。

  if !article.comment.nil?
    p "#{article.article}|#{article.comment.comment}"
  end

の部分で、articleオブジェクトからコメントデータを参照しているのがわかります。

関連付けは、Articleクラスの has_one、Commentクラスの belongs_toで行っています。
シンプルですね。

例では、テーブル名やカラム名の名前の付け方がまずいので"article.article"とか"comment.comment"とかクラス名メソッド名がダブって意味がわかりづらいですが、名前の付け方を工夫して、"document.article"とか"reader.comment"として処理を英文ライクにして意味をわかりやすくすることができると思います。

さて、短い時間で復習チックなプログラムを書いたら頭がスッキリしました(^^
ネタさがしするよりショートチップを作るほうが性に合うようです。

| | コメント (0) | トラックバック (0)

2008年2月19日 (火)

ActiveRecordをさわってみる

さて、それではActiveRecordをつかってみましょう。

すでにRailsの開発環境を持っている方ならMySQLとかがインストールされているかもしれません。しかし、ちょっと触ってみるだけなのに高機能なリレーションデータベースを使うのも面倒な気分なのでsqlite3でDBを作って軽くテストプログラムを作りたいと思います。sqlite3のインストールなどについては、詳しく書いてあるサイトを参照してください。

まず、sqlite3でテーブルとデータを作っておきます。sqlite3へのパスが通っている状態でコマンドラインから以下のように入力します。
---
>sqlite3 data.db
sqlite> create table articles (id integer primary key, article text);
sqlite> insert into articles values(null, "Hello World!");
sqlite> insert into articles values(null, "Konnichiha Sekai!");
sqlite> insert into articles values(null, "Hello Ruby ActiveRecord!");
sqlite> .quit
---

sqlite3では、create tableの際に primary keyを指定するだけでオートインクリメントなカラムになります。

このテーブルのレコードの一覧を表示するプログラムは以下のようになります。
ar1.rb
===
#!/usr/bin/ruby

require 'rubygems'
require 'active_record'

#DB接続
ActiveRecord::Base.establish_connection(
  :adapter => 'sqlite3',
  :database => 'data.db'
)

# articlesテーブルにアクセスするためのクラス
class Article < ActiveRecord::Base
end

#artilesのレコードを表示
Article.find(:all).each{ |article|
  p article.article
}

===
実行すると、articleカラムの全てのデータが表示されます。

データの挿入は以下のとおり。
ar2.rb
===
#!/usr/bin/ruby

require 'rubygems'
require 'active_record'

#DB接続
ActiveRecord::Base.establish_connection(
  :adapter => 'sqlite3',
  :database => 'data.db'
)

# articlesテーブルにアクセスするためのクラス
class Article < ActiveRecord::Base
end

#記事をinsert
Article.create(
  :article => "Konnichiha Ruby to ActiveRecord."
)

===

ar1.rb と ar2.rbはほとんど同じに見えますが、一番下の数行だけ違います。
まあほんと2,3行でシンプルに記述できるのがいいですね。

複数のテーブルを扱う場合、しかるべきテーブルをつくって関連を定義すればデータアクセス処理もシンプルに記述できます。テーブルの関連定義はここなどに詳しく書いてあります。

Railsでデータのメンテナンス画面をつくるだけ、みたいな開発はRailsの知識よりはActiveRecordだと思います。Rails入門としてこの辺をもっとわかりやすく開設していかないといけない気がしますね。

| | コメント (0) | トラックバック (0)

2008年2月18日 (月)

Railsを学ぶ前に

最近Railsネットやら雑誌やらでRails関連の話題をよく目にします。
Railsでの開発が多くなってきているんでしょうか?それとも開発業界でRubyやRailsへの関心が高くなってきているということでしょうか。なかなか楽しくなってきましたね。

ボクはRailsからRubyに関心を寄せるようになったクチでそれまではRubyはPerlのマニアックな拡張だよねえくらいに思っていました。Railsを知ってからフレームワークとしての完成度の高さに感心したのでこれはRubyを勉強してRailsをバリバリ使えるようにならんとアカンなーと思ったものでした。

そんなかんじでしばらくRubyとRailsの勉強をごっちゃに進めてたんですが、なかなかRailsの使い方が進みませんでした。今から思うと、RailsはRubyのいろいろな拡張機能の集まりみたいなものなので、Railsで使われている代表的な機能についての知識がないと、なかなか腹に落ちてこない。だからRailsのマニュアルに書いてあるチュートリアルどおりには作れるけど、なかなか応用に繋がらない、ということになるんですね。少なくともボクはしばらくそんな感じでした。

Railsは規約の多い、良い意味で自由のないフレームワークなので他の言語使いがRailsに感心を持った場合、こういうパターンに陥りやすいかもしれません。じゃあそれを回避して効率よく学ぶには?ボクはそんな大層なことは言えませんが、scaffoldとかだいたい理解したら、ActiveRecordとかのRailsでの開発でよく使う機能について集中して学ぶのがいいかもしれないと思っています。

ActiveRecordはRailsでデフォルトで使われているデータアクセスライブラリです。ActiveRecordを使う上では以下のデフォルトルールがあります。

   1.  テーブル名はモデルクラス名の小文字複数形
   2. 主キーのカラム名はidであること。意味を持たない数の連番であること
   3. カラム名は小文字、区切りにはアンダースコアを利用する
   4. テーブルカラムへのアクセスメソッド名はテーブルの列名

もちろんこれらは変更することも可能ですが、できるだけデフォルトを守ったほうが簡単でいいです。

それでは次回はActiveRecordを使ってデータベースを操作してみましょう。
あえてRailsを使わずにRubyのみでやろうと思います。

| | コメント (0) | トラックバック (0)

2008年2月 7日 (木)

Ramaze - 簡単なものをつくってみる

先日けっこういいと言ったRamazeですが、せっかくなのでちょっと簡単なものを作ってみましょう。screencastsに載っているネタを参考にして、レストランメニューを表示してみたいと思います。

先日の手順の続きです。
createしたrestaurantスケルトンを使います。create後、restaurantディレクトリの下にはいろいろなフォルダができますが、その中のcontroller/main.rbを下記のように編集します。

controller/main.rb
===
# Default url mappings are:
#  a controller called Main is mapped on the root of the site: /
#  a controller called Something is mapped on: /something
# If you want to override this, add a line like this inside the class
#  map '/otherurl'
# this will force the controller to be mounted on: /otherurl

class MainController < Ramaze::Controller
  layout '/page'

  # the index action is called automatically when no other action is specified
  def index
    @title = "Welcome to International Restaurant!"
  end

  # the string returned at the end of the function is used as the html body
  # if there is no template for the action. if there is a template, the string
  # is silently ignored
  def notemplate
    "there is no 'notemplate.xhtml' associated with this action"
  end

  #menu list
  def list( cuisine )
    @title = "Today's Menu"
    case cuisine
      when 'jp'
        @dishes = [
          'Salmon Teriyaki',
          'Unagi Nigiri Sushi',
          'Spicy Tuna Roll',
        ]
      when 'in'
        @dishes = [
          'Chicken Madras',
          'Kashmiri Rogan Josh',
          'Beef Samosas',
        ]
      when 'us'
        @dishes = [
          'Buffalo Wings',
          'New England Clam Chowder',
          'Gumbo',
        ]
    end
  end

end
===

赤字が編集/追加する箇所です。

次に、viewフォルダ下にlist.xhtmlを新規作成して以下のようにします。

view/list.xhtml
===
<?r if @dishes ?>
  <ol>
  <?r @dishes.each do |dish| ?>
    <li>#{dish}</li>
  <?r end ?>
  </ol>
<?r else ?>
  <p>Invalid cuisine.</p>
<?r end ?>

===

最後に、view/index.xhtml を以下のように編集します。

view/index.xhtml
===
<p>Please choose form among our wide variety of fine cuisines:</p>

<ul>
<li><a href="/list/jp">Japanese</a></li>
<li><a href="/list/in">Indian</a></li>
<li><a href="/list/us">American</a></li>
</ul>

===

これで終わり。start.rbを実行します。
---
> ruby start.rb
---

http://localhost:7000/ にアクセスします。
Ws000002

各国のボタンをクリックすると、それぞれのメニューリストを表示します。
Ws000003
Ws000004
Ws000005

超簡単 多国籍レストランのメニュー表示システムw
まあHello Worldの次くらいのステップでしょうか。メニューリストはmain.rbで配列で持ちましたが、ちょっと手を加えるとDBから呼ぶことも可能ですよね。

今回は手軽にやるためにVCで作りましたが、modelフォルダ下にモデルを作ってMVCでももちろんやれます。処理の細かいところはscreencastsチュートリアルを読んでいけばわかると思います。

なんかRailsより手軽にできて楽しいのでもうちょっと勉強してまたRamazeでなんかやってみたいと思います。

| | コメント (0) | トラックバック (0)

2008年2月 5日 (火)

Ramazeがけっこういい

ruby-list MLはずーっとROMな感じなんですが最近rubyから遠ざかり気味なので流し読みばかりの毎日です。しかし、「Rails以外のフレームワーク」というお題で紹介されたRamazeというフレームワークがちょっと気になりました。

Ramazeは軽量で"effortless web development"と副題がついているようにシンプルで簡単な記述で開発ができるWEBフレームワークのようです。現在の最新バージョンは0.3.5です。
Railsに比べて自由勝手がきくのが特徴のようで、多種のテンプレートエンジンやHTTPサーバに対応しており、MVCでなくVCモデルでも開発ができるようです。

パッと見、なんだか細かいものが簡単にできそうなイメージだな。と思ったのでさっそくインストールしてみました。

インストールはRubygemsでできます。
---
> gem install ramaze
---

他にモジュールを要求されたら入れておきます。
ちなみにWindowsの場合、Win32Consoleも入れておくと、コンソールのログに色がついてちょっと見やすくなります。
---
> gem install win32console
---

とりあえず、プロジェクトをつくって、画面を表示してみましょう。
restaurantをつくってみます。
---
C:\usr\ruby\ramaze> ramaze --create restaurant
Creating project restaurant
Copying skeleton project to new project (C:/usr/ruby/ramaze/restaurant)
...
Create directory: 'C:/usr/ruby/ramaze/restaurant/model'
Create directory: 'C:/usr/ruby/ramaze/restaurant/controller'
Create directory: 'C:/usr/ruby/ramaze/restaurant/public'
Create directory: 'C:/usr/ruby/ramaze/restaurant/public/css'
Create directory: 'C:/usr/ruby/ramaze/restaurant/public/js'
Create directory: 'C:/usr/ruby/ramaze/restaurant/spec'
Create directory: 'C:/usr/ruby/ramaze/restaurant/view'
Copy file: 'C:/usr/ruby/ramaze/restaurant/controller/main.rb'
Copy file: 'C:/usr/ruby/ramaze/restaurant/public/css/ramaze_error.css'
Copy file: 'C:/usr/ruby/ramaze/restaurant/public/favicon.ico'
Copy file: 'C:/usr/ruby/ramaze/restaurant/public/js/jquery.js'
Copy file: 'C:/usr/ruby/ramaze/restaurant/public/ramaze.png'
Copy file: 'C:/usr/ruby/ramaze/restaurant/spec/main.rb'
Copy file: 'C:/usr/ruby/ramaze/restaurant/start.rb'
Copy file: 'C:/usr/ruby/ramaze/restaurant/view/error.xhtml'
Copy file: 'C:/usr/ruby/ramaze/restaurant/view/index.xhtml'
Copy file: 'C:/usr/ruby/ramaze/restaurant/view/page.xhtml'

Start your new ramaze app: ruby restaurant/start.rb
---

という感じでディレクトリやスケルトンが生成されます。
これらを変更してつくっていくというのが基本スタイルのようです。

とりあえずこの時点でも起動すると画面は表示されます。
start.rbを実行すればスケルトンが起動します。
---
> cd restaurant
> ruby start.rb
[2008-02-05 15:25:42] INFO   Starting up Ramaze (Version 0.3.5)
[2008-02-05 15:25:42] INFO   Public root: C:/usr/ruby/ramaze/restaurant/public
[2008-02-05 15:25:42] INFO   Template root: C:/ruby/ramaze/restaurant/view
[2008-02-05 15:25:42] DEBUG  mapped Controllers: {"/"=>MainController}
[2008-02-05 15:25:43] INFO   Adapter: Ramaze::Adapter::WEBrick, testing connection to 0.0.0.0:7000..7000
[2008-02-05 15:25:43] INFO   and we're running: 0.0.0.0:7000..7000
[2008-02-05 15:25:43] INFO   WEBrick 1.3.1
[2008-02-05 15:25:43] INFO   ruby 1.8.6 (2007-09-24) [i386-mswin32]
[2008-02-05 15:25:43] DEBUG  TCPServer.new(0.0.0.0, 7000)
[2008-02-05 15:25:43] DEBUG  Rack::Handler::WEBrick is mounted on /.
[2008-02-05 15:25:43] INFO   WEBrick::HTTPServer#start: pid=2928 port=7000
---

ブラウザで http://localhost:7000/ にアクセスします。
200802051

Welcome画面が表示されました。簡単な開発の説明も記載されていますね。

今Ramaza本家のScreencastsTutorialsを見ていっているんですがなるほどRailsに比べて軽い気持ちで開発できそうな感じです。きまりごとがシンプルで見通しが利きやすく、一人でちょっと画面をつくりたいっていうニーズにはRailsより相性がいいかもしれません。

バージョンからみるとまだまだ開発途中のフレームワークのようで実際の開発にはまだ使えないのかもしれませんが、今後開発が進んで安定するとRuby開発の新たな選択肢となるかもしれませんね。

| | コメント (0) | トラックバック (0)

2007年10月18日 (木)

3rdRailがWindowsでやっと起動した

10月は外出が多かったりカゼひいたりしていつにもましてあっという間に時間が過ぎてる気がします。で、気付いたらブログもぜんぜん更新せず。まあ、毎日書くタイプじゃないんですがさすがに10月も半ばになっているのでそろそろ書かないとアレですね(^^;

2週間前くらい前にできてたんですが、Windows上での3rdRailの起動、やっとできました。
もうわけわからなくてCodeGear社のヘルプデスクにメールしたりしましたが、こちらの記事でいただいたコメントが決め手になりました。massangeanaさん、ありがとうございます。

起動した経緯は、まず、CodeGearのヘルプからいただいたメールを参考にして3rdRail.iniの設定値を修正しました。

===

-Xmx256m

===

512を半分の256にしたわけです。それから再起動してくださいと書かれていたので3rdRailを再起動したところ、以前と同じようにスプラッシュ表示後にプロセスが落ちます。

そこで、massangeanaさんのご指示にしたがって、Reset_3rdrail.batを起動しました。これは3rdRail初期起動時に割り当てられる情報を初期化するバッチのようです。バッチ終了後、3rdRailを起動すると、正常に起動しました。やっとWindows版の画面が見れました。

Ws000000

結局のところ、JVMのメモリ割り当てが原因の模様。
CodeGear社によると、「JavaVM が起動時に連続したメモリ領域を確保できないために

、Eclipseが起動できないことがあります。」
ということです。

詳しいことはわからないですが、JVMが断片的なメモリ領域を連続的に確保することが上手でないか、使用可能なメモリ領域が指定メモリ量に満たない場合に確保することができなくなる、といったことがあるということでしょうかね。
メモリいっぱい積んでメモリが連続的にたくさん空いていれば余裕で起動するよーということかな?一応1GB積んでるんですが、昨今は1GBなんて全然ダメなんですかね(^^;

Windowsでの起動がうまくいったのですっきりした気分ですが、一方でUbuntuのほうはさくさく動いています。もうUbuntuのほうに慣れちゃったので勉強はこっちのほうでやっていきます。

| | コメント (0) | トラックバック (0)

2007年9月25日 (火)

3rdRail + Ubuntu Model作成時にエラー

とりあえずは動いて気分がよくなった3rdRail。仕事の合間にちょっとづつ機能を試していってます。

Railsプロジェクトが作成できたので、さてモデルでも作ろうとRailsエクスプローラのModelを右クリック。3rdRailのビデオチュートリアルを参考にしながらモデルを作成してFinish。

すると、

---
>script/generate model --force blog title:string body:text created_at:datetime updated_at:datetime
/usr/local/lib/ruby/1.8/i686-linux/digest/md5.so: libcrypto.so.4: cannot open shared object file: No such file or directory - /usr/local/lib/ruby/1.8/i686-linux/digest/md5.so (LoadError)
    from /usr/local/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:27:in `require'
    from /usr/local/lib/ruby/gems/1.8/gems/activesupport-1.4.2/lib/active_support/dependencies.rb:495:in `require'
    from /usr/local/lib/ruby/gems/1.8/gems/activesupport-1.4.2/lib/active_support/dependencies.rb:342:in `new_constants_in'
    from /usr/local/lib/ruby/gems/1.8/gems/activesupport-1.4.2/lib/active_support/dependencies.rb:495:in `require'
    from /usr/local/lib/ruby/1.8/pstore.rb:11
    from /usr/local/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:27:in `gem_original_require'
    from /usr/local/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:27:in `require'
    from /usr/local/lib/ruby/gems/1.8/gems/activesupport-1.4.2/lib/active_support/dependencies.rb:495:in `require'
     ... 38 levels...
    from /usr/local/lib/ruby/gems/1.8/gems/rails-1.2.3/lib/commands/generate.rb:1
    from /usr/local/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:32:in `gem_original_require'
    from /usr/local/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:32:in `require'
    from /home/btf/3rdRail/workspace/myBlog/script/generate:3
---

なんだかエラーが出ました。
まあ要は libcrypto.so.4(赤字)がないよと言っています。
こういうのはだいたい近いライブラリでダマしたりしたらとりあえず動くもんだなとfindしたところ、libcrypto.so.0.9.8 というのが見つかりました。

深く詮索するよりとりあえず先が見たいのでシンボリックリンクを作ります。

===
# ln -sf /usr/lib/libcrypto.so.0.9.8 /usr/lib/libcrypto.so.4
===

再度モデルを作成。
。。。うまく行きました。

3rdRail Linux版はRedHat系に寄ってる感があるのでDebianベースのUbuntuではこういう細かいのがちょこちょこ発生すると思います。

まあ、様子を見ながらつぶしていきますかね。

| | コメント (0) | トラックバック (0)