DataMapper用のDataStore用アダプタ、dm-datastore-adapterを作りました。

これを使えば、MerbアプリをほぼそのままGoogle App Engine for Javaの上で動かせるようになります。 (実際にはgemの依存関係など、細かい調整が必要になりますが)

実際に以下のサイトでdm-datastore-adapterを使っています。

ローカル環境でも別なアダプタを利用すれば、普通のMerbアプリとして動作テストできるので、開発効率が飛躍的に向上します。

posted by Png genki on Mon 13 Apr 2009 at 05:42

gemを指定したディレクトリにインストールする方法を紹介します。 以下のように -i オプションでディレクトリを指定します。

   1  gem install -i ./gems data_objects --no-ri --no-rdoc

Gemをunpackしている場合に、もう一つ、二つGemを追加したい時などに重宝します。

posted by Png genki on Sun 12 Apr 2009 at 17:36 with 2 comments

現在のところ、JRubyでjgem install do_sqlite3などによってdo_sqlite3をインストールしようとすると、Native extensionを使っているという事でエラーが出ます。

   1  Building native extensions.  This could take a while...
   2  /usr/local/jruby/lib/ruby/1.8/mkmf.rb:7: JRuby does not support native extensions. Check wiki.jruby.org for alternatives. (NotImplementedError)

この問題を解決するには、最新版のdatamapper/doをgithubからとってきて、自分でbuildする必要があります。

http://github.com/datamapper/do/tree/master

doをgit cloneしたら、まずはdata_objectsディレクトリに移動し、以下のようにしてdata_objectsをインストールします。

   1  % jruby -S rake package
   2  % sudo jgem install pkg/data_objects-0.9.12.gem

続いて、do_jdbcディレクトリに移動し、do_jdbcをコンパイルしてインストールします。

   1  % jruby -S rake compile
   2  % jruby -S rake package
   3  % sudo jgem install pkg/do_jdbc-0.9.12-java.gem

最後に、do_sqlite3 ディレクトリに移動し、以下のようにインストールします。

   1  % jruby -S rake package
   2  % sudo jgem install pkg/do_sqlite3-0.9.12-java.gem

以上でインストール完了です。

posted by Png genki on Sun 12 Apr 2009 at 03:48

Bumble はGoogle App Engine for JavaのDateSoreを利用するためのライブラリですが、Railsで利用する前提で作られているので、 Merbで利用する場合には、以下のような修正を加えると良いようです。

bumble.rb

   1  module Bumble
   2    (..snip..) 
   3    def self.included(base)
   4      base.send :include, InstanceMethods
   5      base.send :extend, ClassMethods
   6      Merb::Router.root_behavior = 
   7        Merb::Router.root_behavior.identify(Bumble => :key)
   8    end

これによって、resource(@person) #=> /people/5 のようにidentifyしてくれるようになります。

posted by Png genki on Sun 12 Apr 2009 at 02:23

GAEjのファイル数制限が厳しいので、rails.jarを試作してみました。

rails-2.3.2.jar

jrubyのバグなのか、jarファイルの中身に対してrequireをする時に、 pathの中に../..のような感じの指定が入っているとうまくロードできないようなので、その問題を回避するモンキーパッチをあてる必要がありました。

require_fix.rb

   1  alias :require_original :require
   2  def require(path)
   3    path = File.expand_path(path) if path.to_s.match(/^file:/)
   4    require_original path
   5  end
   6  
   7  alias :load_original :load
   8  def load(path)
   9    path = File.expand_path(path) if path.to_s.match(/^file:/)
  10    load_original path
  11  end      

それでこんな感じに使えます。

   1  % java -jar $JRUBY_HOME/lib/jruby-complete.jar -rrequire_fix -rrails-2.3.2.jar -S rails -v
   2  Rails 2.3.2

実際にはlibの下に設置する感じになりますね。

posted by Png genki on Sat 11 Apr 2009 at 19:34

submoduleネタをゲットしたのでメモ。

@githubのtwt:

GitHub gem builder will now pull in submodules prior to the build.
4:05 AM Apr 9th from web
http://twitter.com/github/status/1478454260

てことは配布しているgemではsubmoduleをpullしてくれるってことでしょうか!!
いいですね!

しかしtarball builderはsubmodule未対応

@github is there any plan to have the tarball builder do the same thing?
http://twitter.com/larrywright/status/1478514289

@larrywright not at the moment. We use git-archive which, for some unknown reason, doesn't support submodules.
http://twitter.com/github/status/1478579621

posted by Png satoko on Fri 10 Apr 2009 at 13:51

訳があって、ホストOSとゲストOSを同じネットワーク上に置くブリッジ接続の設定していました。

この記事はその四苦八苦の様子の記録です・・・。

環境

  • ホストOS: Windows Vista SP1
  • VitualBox 2.1.4
  • ゲストOS: Gentoo Linux 2008.0

問題 その①

2.1系からは、ホストOS側でブリッジ接続用のネットワーク設定をしなくても、VirtualBoxのネットワークの設定で「ホストインタフェース」を選択するだけでブリッジ接続が実現できるらしいということだったのですが、できませんでした・・・。

どういう状態かというと、ゲストOS側でNICの認識をするのですが、DHCPでIPアドレスを割り当てることができない、という感じでした。

問題 その②

そんなこんなで悩んでいるときに、VirtualBox 2.2.0がリリースされたという情報をキャッチし、「ためしにVirtualBox 2.2.0にするかー」という軽い気持ちでインストールしてみました。

しかし、ここでも罠が・・・。

VirtualBox 2.2.0のインストール

もともとVirtualBox 2.1.4をインストールしているので、上書きでインストールしてみました。

流れは、

  • VirtualBox 2.2.0のインストーラを取得する
  • インストーラを起動し、 Repair (修正インストール)を選択する
  • インストールが終了するのを待つ
  • インストールが終了すると、再起動される

といった感じでした。

「ホストインタフェース」が無くなっている・・・

ネットワークの設定に「 ホストインタフェース 」の項目が無くなり、「 ブリッジ ネットワーク 」の項目が!

しかし、「ブリッジネットワークアダプタがありません」とエラーが出て、使えない・・・。

問題解決のための情報収集

2.1系で簡単にブリッジ接続ができるようになった(らしい)というのに、2.2系でまた逆戻り?

んな、アホな・・・。

と思い、「同じような問題に当たっている人がいるはずだ!」とネットで情報収集していると、某巨大掲示板で良い情報が!

【Sun】VirtualBox総合スレ Part4【仮想化】

578 :Be名無しさん:2009/04/09(木) 08:13:50

なんかインストールとアンインストール繰り返してたら

ブリッジでアダプタ選択できるようになった。

アンインストールで失敗する→上書きでインストール→再起動

これが効いたのかな…

さらに、

581 :Be名無しさん:2009/04/09(木) 09:50:58

VirtualBox 2.2.0の最初のインストールではブリッジのアダプタがインストールされない。

再度インストールプログラムを起動してRepairを選択するとブリッジのアダプタがインストールされる。

・・・・・・・・・らしい。

最初のインストールではアダプタがインストールされない・・・だと・・・?

そして解決へ・・・

某巨大掲示板の情報を信用して、Repairでインストールすること数回・・・ブリッジアダプタがインストールされた!!!

\(^0^)/

ゲストOSを起動してみると、きちんとIPアドレスがDHCPで割り当てられてる!!

\(^0^)/ \(^0^)/ \(^0^)/

解決方法まとめ

根気よく何度もVirtualBox 2.2.0をインストールする

結局のところ、VirtualBox 2.1.4のホストインタフェースは何だったのか・・・。

教訓

570 :Be名無しさん:2009/04/09(木) 00:04:54

VirtualBoxはアップデートに地雷が多いから気をつけてネ

特にネットワーク関係

そんな俺は様子見

posted by Png y_tsuda on Fri 10 Apr 2009 at 04:31

Ramaze はModularなWebアプリケーションフレームワークです。 以下のようにしてインストールしました。

   1  % sudo gem install ramaze
   2  % sudo gem install manveru-innate
   3  % sudo gem install manveru-nagoro

続いて、以下のようひな形を生成して起動します。

   1  % ramaze --create hello
   2  % cd hello
   3  % ramaze

ログの出力

ss1

起動画面

ss2

posted by Png genki on Thu 9 Apr 2009 at 19:34

2日前ぐらいからいろいろ頑張ってたのですが、ようやくGAEjの本番環境でMerbアプリを動かせました。

http://jmerbist.appspot.com/

ss

使っているgemをfreezeする仕組みがあるフレームワークであれば、どれでも以外と簡単に動きそうな感じがします。

いやー、これは色々面白い事が出来そうですね!

posted by Png genki on Thu 9 Apr 2009 at 17:23

Google App EngineでMerbを動かしてみた。

ss

しかし、本番環境にデプロイするためには別途Google App Engine Javaのアカウント申請が必要らしい。申請してみたけれど、レスポンスが無いので初回の10000万件の枠はもう無くなっている模様。

残念だなー。

posted by Png genki on Thu 9 Apr 2009 at 09:02