hpricot-0.8.235をjrubyでインストールする手順
最新のhpricotをjruby(1.2)で利用する手順をメモしておきます。
まず、githubから最新のhpricotをcloneしてきます。
あとは、以下のようにしてjruby用のパッケージをbuildしてインストールします。
1 % jruby -S rake package_java 2 % sudo jgem install pkg/hprico t-0.8.235- jruby.gem
これでOK.
最新のhpricotをjruby(1.2)で利用する手順をメモしておきます。
まず、githubから最新のhpricotをcloneしてきます。
あとは、以下のようにしてjruby用のパッケージをbuildしてインストールします。
1 % jruby -S rake package_java 2 % sudo jgem install pkg/hprico t-0.8.235- jruby.gem
これでOK.
以前、Merb用のaliasの設定をご紹介しましたが、今度はjruby版です。
1 alias jm='PATH=./bin:$PATH jruby -S merb' 2 alias jmi='jm -i' 3 alias jmg='PATH=./bin :$PATH jruby -S merb-gen'
rubyとjrubyを両方使ってると、
1 % jruby -S merb
のように書く事が多いので、aliasを設定しておくと便利ですね。
思い立ってJRubyの環境を入れてみる事にしました。
ちょうどバージョン1.2が出ているようなので、ソースを落としてきます。
http://dis
落としてきたファイルは/usr/local
1 % ant
あとは、以下のように~/.zshrcなどで環境変数を設定します。
1 export JRUBY_HOME=/usr/loca l/jruby-1. 2.0 2 export PATH=:$JRUBY_HOME /bin:$PATH
これで、ひとまずjrubyが動くようになります。
1 % jruby -v 2 jruby 1.2.0 (ruby 1.8.6 patchlevel287) (2009-04-08 rev 6586) [i386-java]
Merb/DataM
例えば、Post.has n, :comments な関係がある時に、 以下のようなコードを実行すると、このようになります。
1 ?> Post.first.comments.count #=> 188 2 ~ (0.000865) SELECT "id" FROM "posts" ORDER BY "id" LIMIT 1 3 ~ (0.000094) SELECT "id", "post_id" FROM "comments" WHERE ("post_id" IN (1)) ORDER BY "id" 4 ~ (0.000063) SELECT COUNT(*) FROM "comments" WHERE ("post_id" = 1)
2つ目のSQLは不要なのですが、発行されてしまいます。 例えばCommentのレコード数が多かった場合、Commentオブジェクトを大量に生成しようとしてしまうため、致命的な遅さになってしまいます。
目下この問題の解決策を探しているところですが、
Edge-DMのspec/仕様でerrorが出ている状態なので、なかなか手が付けられない感じです。
とりあえず、dm-coreのassociatio
1 # @api private 2 def get_children(parent, options = {}, finder = :all, *args) 3 parent_val ue = parent_key .get(parent) 4 bind_value s = [ parent_val ue ] 5 6 with_repos itory(child_mode l) do |r| 7 parent_ide ntity_map = parent.repository .identity_m ap(parent_mod el) 8 9 query_valu es = parent_ide ntity_map. keys 10 bind_value s = query_valu es unless query_valu es.empty? 11 query = child_key. zip(bind_value s.transpose).to_hash 12 collection = child_mode l.send(finder, *(args.dup << @query.merge(optio 13 ns).merge(query))) 14 15 return collection unless collection .kind_of?(Collection ) && collection .any?
の最後の collection
最近の釣果ならぬYak Shaving状況:
ということで、MacOSにPostgresを入れるためにユーザを作成する手順のメモ。
1 # dscl . -create /Users/postgres 2 # dscl . -create /Users/pos tgres UserShell /bin/bash 3 # dscl . -create /Users/pos tgres RealName "Postgres" 4 # dscl . -create /Users/pos tgres UniqueID 451 5 # dscl . -create /Users/pos tgres PrimaryGro upID 451 6 # dscl . -create /Users/pos tgres NFSHomeDir ectory /usr/local /pgsql
UID/GIDの根拠は自信が無い。UIDは500未満にしておくとログイン画面にでないようになるそうだ。
Alas, life is full of yakshaving
See Also
その1でsubmoduleをaddし、git-submod
今度はaddした以外の人がpullして、submoduleを確認するところを書いてみます。
1 git pull --rebase #submoduleを追加したコミットを取得 2 git submodule 3 -e110f2056783465b8d7 19bdb1ab5f d14e7650f5 6 vendor/plu gins/rspec
(-がついているので)この時点ではrspec submoduleが初期化されていません。よって下記のコマンドで初期化します:
1 git submodule init 2 git submodule update
又は
1 git submodule update --init
updateすることによりソースファイルを取得します。
これで、addした以外の人もsubmoduleを追加することができました。しかし、まだこれで終わりではなくて実はいくつか検討すべき点があります:
submoduleをaddする前に検討すべき事項です(!):
追加するremoteリポジトリを変更したくなる可能性があるかどうか検討する必要があります。例えばrailsやrspecなら変更を加えるというのはほとんどないように思われますが、完成度の低いpluginだと自分で修正したり、追加したりすることが考えられます。そのような場合、下記のようなシナリオが考えられます:
1,2はなんとなく想像できますが、3,4は運用が面倒そうです...
また、railsまでsubmoduleにする記事もあったのですが、毎回deploy時にコピーすることになるのでdeployに時間がかかるだろうし、容量も食うので運用には向いていないかもしれません。
submoduleを利用する際、外部のbleeding edgeブランチを積極的に採用したくはありません。なので、タグか特定のバージョン(コミット)を利用するのが適切です:
1 cd vendor/plugins/rspec /rspec 2 git tag 3 1.1.10 4 (略) 5 1.2.1 6 1.2.2 7 git checkout 1.2.2 8 cd ../../..
rspecのタグ1.2.2を採用しました。このあとRAILS_ROOT
この後、他の人がこの変更を反映するには下記の作業を行います:
1 git pull --rebase #submoduleを追加したコミットを取得 2 git submodule update
一行追加するだけ!
1 set :git_enable_submodule s, 1
via http://git
rspecを例に:
1 [submodule "vendor/plugins/rspec "] 2 path = vendor/plu gins/rspec 3 url = git://gith ub.com/dch elimsky/rs pec.git
.git/confi
1 [submodule "vendor/plugins/rspec "] 2 url = git://gith ub.com/dch elimsky/rs pec.git
git rm --cached path_to_su
パスの最後に/(スラッシュ)がない状態で:
1 git rm --cached vendor/plugins/rspec
git commit、pushでおしまい
via http://git
初めてsubmoduleを追加すると、下記のファイルが追加されます:
1 .gitmodules
その他に.git/confi
桜が散る前に、4/8の夜21時よりMerbJog#2を開催いたします。
詳細・参加申請は以下のサイトをご覧ください。
飛び入り参加もOKです。
よろしくお願いします。
DataMapper
1 Post.repository.adapter.execute("sql string")
結果は、例えばmysqlを使っている場合にはDataObject
DataMapper
1 def uri=(uri) 2 attribute_set :uri, ::URI.parse(uri).normalize.to_s 3 end
度々忘れるのでメモしておきます。
1 Merb::ControllerExceptions .constants.sort #=> ["Accepted", "ActionNotF ound", "BadGateway ", "BadRequest ", "Base", "ClientErro r", "Conflict", "Continue", "Created", "Expectatio nFailed", "Forbidden", "GatewayTim eout", "Gone", "HTTPVersio nNotSuppor ted", "Informatio nal", "InternalSe rverError", "LayoutNotF ound", "LengthRequ ired", "MethodNotA llowed", "MovedPerma nently", "MovedTempo rarily", "MultiPartP arseError", "MultipleCh oices", "NoContent", "NonAuthori tativeInfo rmation", "NotAccepta ble", "NotFound", "NotImpleme nted", "NotModifie d", "OK", "PartialCon tent", "PaymentReq uired", "Preconditi onFailed", "ProxyAuthe nticationR equired", "Redirectio n", "RequestEnt ityTooLarg e", "RequestRan geNotSatis fiable", "RequestTim eout", "RequestURI TooLarge", "ResetConte nt", "STATUS_COD ES", "SeeOther", "ServerErro r", "ServiceUna vailable", "Successful ", "SwitchingP rotocols", "TemplateNo tFound", "TemporaryR edirect", "Unauthoriz ed", "Unsupporte dMediaType ", "UseProxy"]