CALayerって何ぞ?

UIViewは入れ子にできてUIViewControllerのviewプロパティのUIViewにaddSubViewで階層構造にできる。
まぁこの辺は普通に使ってるし理解してるつもり。


で、

    UIGraphicsBeginImageContext(screenRect.size);
    [self.view.layer renderInContext:UIGraphicsGetCurrentContext()];
    self.screenShot = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();


とかやってスクリーンショットを取ってるんだけど、self.view上に配置しているUIImageViewがスクリーンショットに映らない。。。


たぶんUIImageViewのanimationImagesに画像を複数つっこんでアニメーションさせてるからなんだろうなぁ。。。
layerとかが何か関係しているんだろうなぁ。。。


って事でCALayerについて調べてみる。

CALayerとそのご近所

CALayerクラスはQuartzCore.frameworkに含まれているらしい。


でーQuartzCore.frameworkを調べているとQuartzCore自体のドキュメントって存在しないみたい。
どーしてもCore Animationに行きついてしまう。


って事で QuartzCore = Core Animation と理解
Core Animation Programming Guide ってのもあるし。そこにCALayer出てくるし。


Core Animation Programming GuideによるとCore Animationとはgraphics rendering, projection, animation用クラスの集合体であるって書いてある。
で、Core Animationのクラスは基本的にQuartz Core frameworkに含まれているけど、一部別のframeworkにも含まれているらしい。

ふむ。
Quartz Composer frameworkとQTKit frameworkの事かな。


という事は細かい事を言うと QuartzCore は Core Animation だけど、Core Animation は Quartz Coreだけじゃないって事か。ややこしいな。




そういやQuartzCoreとかCore Animationと言えば何か似たような単語が他にもあるなぁ


QuartzCoreとごっちゃになるのがQuartz2D。これは何だろう?
あとCore Graphicsってのも気になるCore Animation は graphics も含まれてるんじゃなかったの?

Quartz2Dって何よ

ごそごそ探していると Quartz 2D Programing Guide を発見。
それによると Quartz 2D とは2次元描画エンジンのAPIとの事。

んー framework と class collection と API か。。。。混沌としてきた。


あ、APIってCの関数群って事?
なんかそんな気がしてきた。


つまり、ごそごそ描画するにはQuartzCoreに含まれているCore Animation ClassesにたいしてQuartz 2D APIでごにょごにょするって事かな?

そういえば Quartz 2D APIってCGhogehogeだけど、このCGってCore Graphics framework???

次はCore Graphics framework

Core Graphics framework Reference ってのがあった。framework はreferenceがあるのね。
で、Core Animation はframeworkじゃないのでPrograming Guideなのか。ふむふむ


で、referenceによるとCore Graphics frameworkとはQuartzエンジンをベースとしたCのAPIです。だそうです。
低レベル、軽量2Dレンダリングを提供してくれるらしく、このフレームワークを使えばパスが書けたりトランジションできたり色々山盛りだと。


んーQuartz Coreいらなくね? Core Graphicsだけでよくね?


と、思ったんだけどlayer使うならQuartz Coreがいるのか。
なるへそ・ザ・ワールド




ちょ。。。




CGLayerって何wwww

CGLayerとCALayer

cocoa - What's the difference and compatibility of CGLayer and CALayer? - Stack Overflow はい。そのものずばり。


CALayerは入れもので、表示されてる実態がCGLayerと理解。

まとめ

CALayerは入れもので、表示されてる実態がCGLayerと理解。

これに行き着いたのがbreak throughかも。


Core Animation は入れ物で Core Graphicsが実態。


Core Animationでステージを用意し、Core Graphicsで絵を書く。
Core Animationで操作すればCore Graphicsで書いた絵を切替えたり表示する部分を限定したり拡大したり色々できる。


みたいな感じ




で、あってる???



つまり絵の書き方についてはCore Graphics(Quartz2D)を調べ、表示のさせ方についてはCore Animation(Quartz Core)だと。






で、あってる?????






と、いう事でスクショがうまくとれないのはCore Animationを勉強すればいいらしい。(で、たぶんCALayerの管理に行きつく)

UIViewController の viewライフサイクル についてのメモ

なんかすぐに忘れるのでメモ
もとネタはAppleさんのReferenceとか

間違ってたらコメントくだしあ


didReceiveMemoryWarning

アプリがメモリ不足の警告を受けとった時に呼ばれる。


デフォルトの実装ではまずviewを安全に開放できるかどうかをチェックします。
安全に開放できるというのは、viewが親view(スーパービュー)を持っていない状態で、nibファイルまたはloadViewメソッドで再読み込みできる状態です。
viewを安全に開放できる事が確認できたらviewを開放してviewDidUnloadメソッドを呼びます。


view controllerで使っている他のメモリ領域も開放したい場合はこのメソッドをオーバーライドして開放できます。
その場合はオーバーライドしたメソッドの中のviewを開放したい時点でsuperを呼んでください。


iOS 3.0移行ではview controllerがview階層内のオブジェクト参照を持っていたら、その参照をviewDidUnloadメソッドで開放する必要があり、それより前のiOSではこのメソッド内で開放する必要があります。


アウトレットとその他のオブジェクトを安全に開放する方法はviewDidUnloadメソッドの説明を参照。


initWithNibName:bundle:

指定されたバンドルのnibファイルをもとにview controlerを初期化する。


これがUIViewControllerの指定イニシャライザです。

指定したnibファイルはすぐに読み込まれるわではなく、初めてview controllerのviewプロパティにアクセスした時に読み込まれます。
もしnibファイルが読み込まれた時に何か追加の初期化を行いたい時はviewDidLoadメソッドをオーバーライドしてやりたい事をそこで実効させます。


nibNameにnilを指定する場合はloadViewメソッドをオーバーライドしてviewを作成するか、view controllerクラスの名前と一致するnibファイルを作成してバンドル内に置いておく必要があります。(後者の場合は nibName プロパティにクラス名が保存されます)
もしどちらの対応もとらなかった場合はview controllerはviewを読み込む事ができません。


view controllerがviewを読み込む際のさらに詳しい情報は View Controller Programming Guide for iOS の "Custom View Controllers" を参照してください。


loadView

controllerが制御するviewを作成する。


このメソッドは直接呼んではいけない。
viewプロパティがnilに時にviewプロパティを読もうとするとview controllerが、このメソッドを呼ぶ。


viewを手動で作成したい時にはこのメソッドをオーバーライドしてお好みのviewを作成する。
Interface Builder上でviewを作ってview controllerを初期化する時、つまりinitWithNibName:bundle:メソッドでnibNameとnibBundleプロパティを直接指定してそのviewを初期化した場合や、Interface Builderでviewとview controllerを両方作った場合はこのメソッドをオーバーライドする必要はない。


デフォルトの実装では有効なnibの情報を探し、その情報をもとに関連付けられたnibファイルをloadします。
もしnibの情報が指定されていなかったら、デフォルトでは素のUIViewオブジェクトを作成しmain viewとします。


このメソッドをオーバーライドしてviewを手動で作成する時は、作成したview階層のroot viewをviewプロパティにセットするようにしてください。(作成したviewは一意なインスタンスある必要があり、他のview controllerオブジェクトと共有しているものであってはいけません)
なおこのメソッドの個別の実装の中で super を呼んではいけません。


viewを作成する以外の追加の初期化をしたい場合はviewDidLoadメソッドの中で実行します。
iOS 3.0以降だったら viewDidUnload メソッドもオーバーライドして view や他のコンテンツの参照を開放する必要もあります。


viewDidAppear:

view controllerのviewがwindowに追加されたらview controllerに通知される


viewが表示される動作に関連付けて何かやりたい事があればこのメソッドをオーバーライドする。
もしオーバーライドするなら、実装の中のどこかでsuperを呼んでね。


viewDidDisappear:

view controllerのviewが破棄されたり覆われたりした場合や、その他の方法で非表示になったらview controllerに通知される


viewが破棄されたり非表示になる動作に関連付けて何かやりたい事があったらこのメソッドをオーバーライドする。
もしオーバーライドするなら、実装の中のどこかでviewDidDisappearを呼んでね。


viewDidLoad

view controllerのviewがメモリに読み込まれた後に呼ばれる。


このメソッドはview controllerが関連付けられたviewをメモリに読み込んだ後に呼ばれる。
ちなみにこのメソッドはviewがnibファイルから読み込まれたかloadViewメソッドで作られたかは関係なく呼ばれます。
このメソッドは一般的にnibファイルからviewが読み込まれた後に何か追加で初期化したい事がある時に使われます。


viewDidUnload

view controllerのviewがメモリから開放されたら呼ばれる


このメソッドはviewDidLoadの対となるものとして呼ばれる。


メモリ不足に陥った時に view controller がview や、viewに関連するオブジェクトを開放して空きメモリが確保できるまで呼ばれる。
view controllerはたいていviewと、viewに関連するオブジェクトを持っているので、メモリ不足の時にメモリを再利用できるように、このメソッドでオブジェクトを手放す必要がある。


viewDidLoadメソッドやアプリの他のパーツから後で簡単に作りなおせるオブジェクトだけ開放するべきで、簡単に作りなおせないユーザーデータや他の情報は開放しないでください。


一般的にはview controllerはIBOutletキーワードを含む変数やプロパティにオブジェクトの参照を保持していてInterfaceBuilderで設定がなされており、view controllerはviewDidLoadメソッドなどよってプログラミングでオブジェクトのポインタも保持しています。


保持しているオブジェクトを開放する好ましい方法はアクセサメソッドなどで値をnilにする事ですが、もしアクセサメソッドを作っていなかったら明示的にオブジェクトを開放してあげる必要がある。


ちなみにこのメソッドが呼ばれる時はviewプロパティはnilになります。

注意点

もし、view controllerがviewや他のオブジェクトを保持していたら、保持しているオブジェクトをdeallocメソッドで安全に破棄する責任があります。


iOS 2.x用のアプリにこのメソッドを実装する場合はdeallocメソッドで各オブジェクトを開放する必要がありますがsuperを呼ぶ前にnilを代入する必要もあります。


viewWillAppear:

view controllerのviewが表示される時にview controllerに通知されます。


このメソッドはレシーバーのviewがスクリーン上に表示される前、もしくは設定されているアニメーションが表示される前に呼ばれる。
このメソッドをオーバーライドする事でviewが表示される時にやりたい事を実装できる。
でも、もし、このメソッドをオーバーライドする時はsuperをどこかで呼んでね。


viewWillDisappear:

view controllerのviewが隠れたり、非表示になったりする時に呼ばれる


このメソッドはviewがwindowから取り除かれたり、他のviewに覆われたりする事に反応して、その前に呼ばれる。
このメソッドをサブクラスでオーバーライドすることで編集を確定したり、viewのファーストレスポンダーを変えたり、他にやりたい事を実装できます。
でも、もし、このメソッドをオーバーライドする時はsuperをどこかで呼んでね。

初めてのHeroku

と、いう事で開発環境も整ったので
Ruby on Rails向けPaaS「Heroku」って、こんな感じです(スクリーンキャスト):Rails Hub情報局:エンジニアライフをトレースしてみる。

Herokuへのユーザ登録は記憶にないけど、いつのまにか終ってます。

gemsetをつくる

Heroku専用のgemsetがあった方がいいよね。たぶん。

satsuki:myapp hana-da$ rvm list

rvm rubies

=> ruby-1.8.7-p352 [ x86_64 ]
   ruby-1.9.2-p290 [ x86_64 ]
satsuki:apps hana-da$ rvm gemset use heroku

もう慣れたぜ。へへへ。

satsuki:apps hana-da$ gem list

*** LOCAL GEMS ***

bundler (1.0.18)
rake (0.9.2)

@globalにbundlerを入れてるので いい感じ


で、Powがイカスらしいので試してみる - 日々此妄想の時に作ったmyappにGemfileがあるのでそれでbundle install

satsuki:~ hana-da$ cd Documents/Development/Rails/myapp/
satsuki:myapp hana-da$ bundle install
Fetching source index for http://rubygems.org/
Using rake (0.9.2) 
Installing abstract (1.0.0) WARNING: abstract-1.0.0 has an invalid nil value for @cert_chain

Installing activesupport (3.0.10) 
Installing builder (2.1.2) WARNING: builder-2.1.2 has an invalid nil value for @cert_chain

Installing i18n (0.5.0) 
:
Installing rails (3.0.10) 
Installing sqlite3 (1.3.4) with native extensions 
Your bundle is complete! Use `bundle show [gemname]` to see where a bundled gem is installed.

あーなんか、すっげー今風。すげーすげー。


で、Pow用のおまじない

satsuki:myapp hana-da$ echo "rvm 1.8.7@heroku" > .rvmrc

これで下準備完了

herokuコマンドの導入

gem install heroku

satsuki:myapp hana-da$ gem install heroku
Fetching: term-ansicolor-1.0.6.gem (100%)
Fetching: rest-client-1.6.3.gem (100%)
Fetching: addressable-2.2.6.gem (100%)
Fetching: launchy-2.0.5.gem (100%)
Fetching: heroku-2.4.2.gem (100%)
Successfully installed term-ansicolor-1.0.6
Successfully installed rest-client-1.6.3
Successfully installed addressable-2.2.6
Successfully installed launchy-2.0.5
Successfully installed heroku-2.4.2
5 gems installed

さくさく行くね。


ちゃんと入ったかな

satsuki:myapp hana-da$ heroku version
heroku-gem/2.4.2

桶々

gitリポジトリの作成

git init

satsuki:myapp hana-da$ git init
Initialized empty Git repository in /Users/hana-da/Documents/Development/Rails/myapp/.git/


git add

satsuki:myapp hana-da$ git add .


そういや .gitignore が標準装備だっけ?

satsuki:myapp hana-da$ cat .gitignore 
.bundle
db/*.sqlite3
log/*.log
tmp/

ほほう。


で、git commit

satsuki:myapp hana-da$ git commit -am 'first commit'
[master (root-commit) 5bb485c] first commit
 55 files changed, 10387 insertions(+), 0 deletions(-)
 create mode 100644 .gitignore
 create mode 100644 .rvmrc
 create mode 100644 Gemfile
 create mode 100644 Gemfile.lock
:
 create mode 100644 vendor/plugins/.gitkeep


おっしゃ。あとは heroku にデプロイするんだな。

heroku create

heroku側にリポジトリ(?)を作る

satsuki:myapp hana-da$ heroku create myapp
Enter your Heroku credentials.
Email: heroku@example.com
Password: 
 !   Name is already taken

お決りの Name is already taken いただきました。シナリオ通りです。
てか、鍵の登録聞かれなかったな。。。記憶がない時にやったんだっけ。やった気がするな。。。どうやってやったんだっけ??? 記憶にない。。。まぁいいか。


名前を変えて再登録

satsuki:myapp hana-da$ heroku create myapp368934
Creating myapp368934... done, stack is bamboo-mri-1.9.2
http://myapp368934.heroku.com/ | git@heroku.com:myapp368934.git

わーい。


open http://myapp368934.heroku.com してみる

おおおお。
https://api.heroku.com/myappsでも確認した。


git remoteは

satsuki:myapp hana-da$ git remote -v
heroku	git@heroku.com:myapp368934.git (fetch)
heroku	git@heroku.com:myapp368934.git (push)

登録済。ステキ

いよいよ git push

いきまーす。

satsuki:myapp hana-da$ git push heroku master
Counting objects: 86, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (68/68), done.
Writing objects: 100% (86/86), 88.35 KiB, done.
Total 86 (delta 2), reused 0 (delta 0)

-----> Heroku receiving push
-----> Ruby/Rails app detected
-----> Detected Rails is not set to serve static_assets
       Installing rails3_serve_static_assets... done
-----> Configure Rails 3 to disable x-sendfile
       Installing rails3_disable_x_sendfile... done
-----> Configure Rails to log to stdout
       Installing rails_log_stdout... done
-----> Gemfile detected, running Bundler version 1.0.7
       Unresolved dependencies detected; Installing...
       Using --without development:test
       Fetching source index for http://rubygems.org/
       Installing rake (0.9.2) 
       Installing abstract (1.0.0) 
       Installing activesupport (3.0.10) 
       Installing builder (2.1.2) 
       Installing i18n (0.5.0) 
       Installing activemodel (3.0.10) 
       Installing erubis (2.6.6) 
       Installing rack (1.2.3) 
       Installing rack-mount (0.6.14) 
       Installing rack-test (0.5.7) 
       Installing tzinfo (0.3.29) 
       Installing actionpack (3.0.10) 
       Installing mime-types (1.16) 
       Installing polyglot (0.3.2) 
       Installing treetop (1.4.10) 
       Installing mail (2.2.19) 
       Installing actionmailer (3.0.10) 
       Installing arel (2.0.10) 
       Installing activerecord (3.0.10) 
       Installing activeresource (3.0.10) 
       Using bundler (1.0.7) 
       Installing rdoc (3.9.2) 
       Installing thor (0.14.6) 
       Installing railties (3.0.10) 
       Installing rails (3.0.10) 
       Installing sqlite3 (1.3.4) with native extensions 
       Your bundle is complete! It was installed into ./.bundle/gems/
-----> Compiled slug size is 4.1MB
-----> Launching... done, v4
       http://myapp368934.heroku.com deployed to Heroku

To git@heroku.com:myapp368934.git
 * [new branch]      master -> master

いった。


確認するするー heroku open てやればブラウザが立ち上がるはず

satsuki:myapp hana-da$ heroku open
Opening http://myapp368934.heroku.com/


おーすげー。しかも、すっげー見慣れた画面www

heroku で db:migrate

db:migrate忘れてたよ。てへっ。との事なので heroku rake db:migrate する

satsuki:myapp hana-da$ heroku rake db:migrate
(in /app)
rake aborted!
uninitialized constant Rake::DSL
/usr/ruby1.9.2/lib/ruby/1.9.1/rake.rb:2482:in `const_missing'
/app/.bundle/gems/ruby/1.9.1/gems/rake-0.9.2/lib/rake/tasklib.rb:8:in `<class:TaskLib>'
/app/.bundle/gems/ruby/1.9.1/gems/rake-0.9.2/lib/rake/tasklib.rb:6:in `<module:Rake>'
/app/.bundle/gems/ruby/1.9.1/gems/rake-0.9.2/lib/rake/tasklib.rb:3:in `<top (required)>'
/app/.bundle/gems/ruby/1.9.1/gems/rdoc-3.9.2/lib/rdoc/task.rb:37:in `require'
/app/.bundle/gems/ruby/1.9.1/gems/rdoc-3.9.2/lib/rdoc/task.rb:37:in `<top (required)>'
/app/.bundle/gems/ruby/1.9.1/gems/railties-3.0.10/lib/rails/tasks/documentation.rake:2:in `require'
/app/.bundle/gems/ruby/1.9.1/gems/railties-3.0.10/lib/rails/tasks/documentation.rake:2:in `<top (required)>'
/app/.bundle/gems/ruby/1.9.1/gems/railties-3.0.10/lib/rails/tasks.rb:15:in `load'
/app/.bundle/gems/ruby/1.9.1/gems/railties-3.0.10/lib/rails/tasks.rb:15:in `block in <top (required)>'
/app/.bundle/gems/ruby/1.9.1/gems/railties-3.0.10/lib/rails/tasks.rb:6:in `each'
/app/.bundle/gems/ruby/1.9.1/gems/railties-3.0.10/lib/rails/tasks.rb:6:in `<top (required)>'
/app/.bundle/gems/ruby/1.9.1/gems/railties-3.0.10/lib/rails/application.rb:215:in `require'
/app/.bundle/gems/ruby/1.9.1/gems/railties-3.0.10/lib/rails/application.rb:215:in `initialize_tasks'
/app/.bundle/gems/ruby/1.9.1/gems/railties-3.0.10/lib/rails/application.rb:139:in `load_tasks'
/app/.bundle/gems/ruby/1.9.1/gems/railties-3.0.10/lib/rails/application.rb:77:in `method_missing'
/app/Rakefile:7:in `<top (required)>'
/usr/ruby1.9.2/lib/ruby/1.9.1/rake.rb:2373:in `load'
/usr/ruby1.9.2/lib/ruby/1.9.1/rake.rb:2373:in `raw_load_rakefile'
/usr/ruby1.9.2/lib/ruby/1.9.1/rake.rb:2007:in `block in load_rakefile'
/usr/ruby1.9.2/lib/ruby/1.9.1/rake.rb:2058:in `standard_exception_handling'
/usr/ruby1.9.2/lib/ruby/1.9.1/rake.rb:2006:in `load_rakefile'
/usr/ruby1.9.2/lib/ruby/1.9.1/rake.rb:1991:in `run'
/usr/ruby1.9.2/bin/rake:31:in `<main>'

へ???


あ、、、、 もしかして Heroku って Ruby 1.9.2 なの?
がちょぴーん。

せっかく作った @heroku を 1.9.2 にも作る

Heroku側のRubyのバージョンを変更する方法がどっかに書いてあった気がするけど、ここはRVM環境の真価を発揮し。。。。どうやるんだ?
地道にやるか。。。


まず 1.9.2 に移る

satsuki:myapp hana-da$ rvm use 1.9.2
Using /Users/hana-da/.rvm/gems/ruby-1.9.2-p290


@herokuを作ってuse

satsuki:myapp hana-da$ rvm gemset create heroku
'heroku' gemset created (/Users/hana-da/.rvm/gems/ruby-1.9.2-p290@heroku).
satsuki:myapp hana-da$ rvm use 1.9.2@heroku
Using /Users/hana-da/.rvm/gems/ruby-1.9.2-p290 with gem set heroku

ふむ。


gem listは

satsuki:myapp hana-da$ gem list

*** LOCAL GEMS ***

rake (0.9.2)

あれ? bundler がない。。。。
そか 1.8.7@globalにしか入れてないか。。。


1.9.2@globalにbunderを入れる

satsuki:myapp hana-da$ rvm use 1.9.2@global
Using /Users/hana-da/.rvm/gems/ruby-1.9.2-p290 with gemset global
satsuki:myapp hana-da$ gem install bundler
Fetching: bundler-1.0.18.gem (100%)
Successfully installed bundler-1.0.18
1 gem installed
Installing ri documentation for bundler-1.0.18...
Installing RDoc documentation for bundler-1.0.18...


1.9.2@herokuに戻ってherokuを入れる

satsuki:myapp hana-da$ rvm use 1.9.2@heroku
Using /Users/hana-da/.rvm/gems/ruby-1.9.2-p290 with gemset heroku
satsuki:myapp hana-da$ gem list

*** LOCAL GEMS ***

bundler (1.0.18)
rake (0.9.2)
satsuki:myapp hana-da$ gem install heroku
Fetching: term-ansicolor-1.0.6.gem (100%)
Fetching: mime-types-1.16.gem (100%)
Fetching: rest-client-1.6.3.gem (100%)
Fetching: addressable-2.2.6.gem (100%)
Fetching: launchy-2.0.5.gem (100%)
Fetching: heroku-2.4.2.gem (100%)
Successfully installed term-ansicolor-1.0.6
Successfully installed mime-types-1.16
Successfully installed rest-client-1.6.3
Successfully installed addressable-2.2.6
Successfully installed launchy-2.0.5
Successfully installed heroku-2.4.2
6 gems installed

ふむ。


で、後なんだ?
あ、Powね。

satsuki:myapp hana-da$ echo "rvm 1.9.2@heroku" > .rvmrc 


でーbundle installかな。

satsuki:myapp hana-da$ bundle install
Fetching source index for http://rubygems.org/
Using rake (0.9.2) 
Installing abstract (1.0.0) WARNING: abstract-1.0.0 has an invalid nil value for @cert_chain

Installing activesupport (3.0.10) 
Installing builder (2.1.2) WARNING: builder-2.1.2 has an invalid nil value for @cert_chain

Installing i18n (0.5.0) 
Installing activemodel (3.0.10) 
Installing erubis (2.6.6) 
Installing rack (1.2.3) 
Installing rack-mount (0.6.14) 
Installing rack-test (0.5.7) 
Installing tzinfo (0.3.29) 
Installing actionpack (3.0.10) 
Using mime-types (1.16) 
Installing polyglot (0.3.2) 
Installing treetop (1.4.10) 
Installing mail (2.2.19) 
Installing actionmailer (3.0.10) 
Installing arel (2.0.10) 
Installing activerecord (3.0.10) 
Installing activeresource (3.0.10) 
Using bundler (1.0.18) 
Installing rdoc (3.9.2) 
Installing thor (0.14.6) 
Installing railties (3.0.10) 
Installing rails (3.0.10) 
Installing sqlite3 (1.3.4) with native extensions 
Your bundle is complete! Use `bundle show [gemname]` to see where a bundled gem is installed.

以上、地道な作業でした。

気をとりなおして、もう一度 db:migrate

するよー

satsuki:myapp hana-da$ heroku rake db:migrate
(in /app)
rake aborted!
uninitialized constant Rake::DSL
/usr/ruby1.9.2/lib/ruby/1.9.1/rake.rb:2482:in `const_missing'
/app/.bundle/gems/ruby/1.9.1/gems/rake-0.9.2/lib/rake/tasklib.rb:8:in `<class:TaskLib>'
/app/.bundle/gems/ruby/1.9.1/gems/rake-0.9.2/lib/rake/tasklib.rb:6:in `<module:Rake>'
/app/.bundle/gems/ruby/1.9.1/gems/rake-0.9.2/lib/rake/tasklib.rb:3:in `<top (required)>'
/app/.bundle/gems/ruby/1.9.1/gems/rdoc-3.9.2/lib/rdoc/task.rb:37:in `require'
/app/.bundle/gems/ruby/1.9.1/gems/rdoc-3.9.2/lib/rdoc/task.rb:37:in `<top (required)>'
/app/.bundle/gems/ruby/1.9.1/gems/railties-3.0.10/lib/rails/tasks/documentation.rake:2:in `require'
/app/.bundle/gems/ruby/1.9.1/gems/railties-3.0.10/lib/rails/tasks/documentation.rake:2:in `<top (required)>'
/app/.bundle/gems/ruby/1.9.1/gems/railties-3.0.10/lib/rails/tasks.rb:15:in `load'
/app/.bundle/gems/ruby/1.9.1/gems/railties-3.0.10/lib/rails/tasks.rb:15:in `block in <top (required)>'
/app/.bundle/gems/ruby/1.9.1/gems/railties-3.0.10/lib/rails/tasks.rb:6:in `each'
/app/.bundle/gems/ruby/1.9.1/gems/railties-3.0.10/lib/rails/tasks.rb:6:in `<top (required)>'
/app/.bundle/gems/ruby/1.9.1/gems/railties-3.0.10/lib/rails/application.rb:215:in `require'
/app/.bundle/gems/ruby/1.9.1/gems/railties-3.0.10/lib/rails/application.rb:215:in `initialize_tasks'
/app/.bundle/gems/ruby/1.9.1/gems/railties-3.0.10/lib/rails/application.rb:139:in `load_tasks'
/app/.bundle/gems/ruby/1.9.1/gems/railties-3.0.10/lib/rails/application.rb:77:in `method_missing'
/app/Rakefile:7:in `<top (required)>'
/usr/ruby1.9.2/lib/ruby/1.9.1/rake.rb:2373:in `load'
/usr/ruby1.9.2/lib/ruby/1.9.1/rake.rb:2373:in `raw_load_rakefile'
/usr/ruby1.9.2/lib/ruby/1.9.1/rake.rb:2007:in `block in load_rakefile'
/usr/ruby1.9.2/lib/ruby/1.9.1/rake.rb:2058:in `standard_exception_handling'
/usr/ruby1.9.2/lib/ruby/1.9.1/rake.rb:2006:in `load_rakefile'
/usr/ruby1.9.2/lib/ruby/1.9.1/rake.rb:1991:in `run'
/usr/ruby1.9.2/bin/rake:31:in `<main>'

ワロタ


んーもう1回 git push した方がいいのかな?

satsuki:myapp hana-da$ git status
# On branch master
# Changes not staged for commit:
#   (use "git add <file>..." to update what will be committed)
#   (use "git checkout -- <file>..." to discard changes in working directory)
#
#	modified:   .rvmrc
#
no changes added to commit (use "git add" and/or "git commit -a")

やー。こんな状態だから意味ないか。


たぶんもう1回bunderをheroku側で走らせてあげた方がいいような気が。。。気のせいかなぁ。。。


とりあえずカスじゃないので

uninitialized constant Rake::DSL

をググります。
ruby on rails - How to fix the uninitialized constant Rake::DSL problem on Heroku? - Stack Overflow こんなん出ました。
素直にしたがい Rakefile の requre 'rake' の上に

require 'rake/dsl_definition'

を追加。


ほんでもってgit commit and push

satsuki:myapp hana-da$ git add Rakefile 
satsuki:myapp hana-da$ git commit -m 'solve: uninitialized constant Rake::DSL'
[master 70df50a] solve: uninitialized constant Rake::DSL
 1 files changed, 1 insertions(+), 0 deletions(-)
satsuki:myapp hana-da$ git push heroku master
Counting objects: 5, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (3/3), done.
Writing objects: 100% (3/3), 338 bytes, done.
Total 3 (delta 2), reused 0 (delta 0)

-----> Heroku receiving push
-----> Ruby/Rails app detected
-----> Detected Rails is not set to serve static_assets
       Installing rails3_serve_static_assets... done
-----> Configure Rails 3 to disable x-sendfile
       Installing rails3_disable_x_sendfile... done
-----> Configure Rails to log to stdout
       Installing rails_log_stdout... done
-----> Gemfile detected, running Bundler version 1.0.7
       All dependencies are satisfied
-----> Compiled slug size is 4.1MB
-----> Launching... done, v5
       http://myapp368934.heroku.com deployed to Heroku

To git@heroku.com:myapp368934.git
   5bb485c..70df50a  master -> master

よし。


今度こそ

satsuki:myapp hana-da$ heroku rake db:migrate
(in /app)
/app/.bundle/gems/ruby/1.9.1/gems/rake-0.9.2/lib/rake/file_utils.rb:10: warning: already initialized constant RUBY
/app/.bundle/gems/ruby/1.9.1/gems/rake-0.9.2/lib/rake/file_utils.rb:84: warning: already initialized constant LN_SUPPORTED
Migrating to CreateBlogs (20110819084614)
==  CreateBlogs: migrating ====================================================
-- create_table(:blogs)
   -> 0.0164s
==  CreateBlogs: migrated (0.0165s) ===========================================

おっしゃー!!!!


ほんでもって heroku open やー

おおしゃーおおしゃーん


そっかHerokuが1.9.2だから手元が1.8.7だとrakeできないってのは発想がおかしいか。
Heroku側でもbundlerが動いてrakeとかはHeroku側用のが入るわけだし。
とかいう妄想あってるかな?

うわさのdb:pushを試す

手元のsqliteのデータをHeroku側にpushしてくれるんだって。すげー

satsuki:myapp hana-da$ heroku db:push
Taps Load Error: no such file to load -- taps/operation
You may need to install or update the taps gem to use db commands.
On most systems this will be:

sudo gem install taps

うごかねぇ。


tapsがいるって事かな?

satsuki:myapp hana-da$ gem install taps
Fetching: sequel-3.20.0.gem (100%)
Fetching: sinatra-1.0.gem (100%)
Fetching: sqlite3-ruby-1.3.3.gem (100%)
:

気にせずガンガン入れれるっていいよね。
って sinatra まで入ったぞ。


ん?てかこうやって入れるんじゃなくてGemfileに書いてbundle installするのが正解なのかな?
まぁいいや。


では再度

satsuki:myapp hana-da$ heroku db:push
Loaded Taps v0.3.23
Auto-detected local database: sqlite://db/development.sqlite3
Warning: Data in the app 'myapp368934' will be overwritten and will not be recoverable.

 !    WARNING: Potentially Destructive Action
 !    This command will affect the app: myapp368934
 !    To proceed, type "myapp368934" or re-run this command with --confirm myapp368934

> myapp368934
Sending schema
Schema:        100% |==========================================| Time: 00:00:02
Sending indexes
schema_migrat: 100% |==========================================| Time: 00:00:01
Sending data
2 tables, 3 records
schema_migrat: 100% |==========================================| Time: 00:00:00
blogs:         100% |==========================================| Time: 00:00:00
Resetting sequences
satsuki:myapp hana-da$ 

キター
ステキスグル!キンニクスルグ!!!


heroku openだっ

あー最高。
ビール飲みてぇ

変更を加える

とりあえずviewを何か適当にいじる

satsuki:myapp hana-da$ vi app/views/blogs/index.html.erb 

んで commit and push

satsuki:myapp hana-da$ git commit -am 'change title'
[master b05267c] change title
 3 files changed, 3 insertions(+), 2 deletions(-)
satsuki:myapp hana-da$ git push heroku master
Counting objects: 15, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (6/6), done.
Writing objects: 100% (8/8), 650 bytes, done.
Total 8 (delta 4), reused 0 (delta 0)

-----> Heroku receiving push
-----> Ruby/Rails app detected
-----> Detected Rails is not set to serve static_assets
       Installing rails3_serve_static_assets... done
-----> Configure Rails 3 to disable x-sendfile
       Installing rails3_disable_x_sendfile... done
-----> Configure Rails to log to stdout
       Installing rails_log_stdout... done
-----> Gemfile detected, running Bundler version 1.0.7
       All dependencies are satisfied
-----> Compiled slug size is 4.1MB
-----> Launching... done, v6
       http://myapp368934.heroku.com deployed to Heroku

To git@heroku.com:myapp368934.git
   70df50a..b05267c  master -> master

さくっといくね♪


で、 heroku open

はい。こんにちは。



という事でscreen castもここでブチ切れてるので、おしまいっと。

Powがイカスらしいので試してみる

rvmとかrailsとかの情報をごにょごにょ漁ってるとRailsの開発においてPowというものがクソ便利らしいので試してみる


Node.js+CoffeeScriptで書かれた「Pow」がカッコ良すぎる件:Rails Hub情報局:エンジニアライフ で概要とか紹介されてる。
それに影響された人 「Pow」MacでRails開発している人にお勧め環境 - BitArts もありがとうございます。


で、慣れてきたら [rails][pow] Powを使い倒す - mat_akiの日記を参考にイジリ倒す予定

じゃ、インスコ

$ curl get.pow.cx | sh

一発らしい


どれどれ

satsuki:~ hana-da$ curl get.pow.cx | sh
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100  6795  100  6795    0     0   5070      0  0:00:01  0:00:01 --:--:--  5101
*** Installing Pow 0.3.2...
*** Installing local configuration files...
/Users/hana-da/Library/LaunchAgents/cx.pow.powd.plist
*** Installing system configuration files as root...
Password:
/Library/LaunchDaemons/cx.pow.firewall.plist
/etc/resolver/dev
*** Starting the Pow server...
*** Performing self-test...
*** Installed

For troubleshooting instructions, please see the Pow wiki:
https://github.com/37signals/pow/wiki/Troubleshooting

To uninstall Pow, `curl get.pow.cx/uninstall.sh | sh`

入ったぽ。

アンインストール方法は To uninstall Pow, `curl get.pow.cx/uninstall.sh | sh` らしい。

早速試す

Pow経由で動かすアプリをPowに登録するには ~/.pow に rails root の sym linkを作成すればいいらしい。
$ ln -s myapp ~/.pow とか。ほんで myapp.dev をブラウザから叩けと。。。
サブドメインとかやりたいんなら
$ ln -s myapp ~/.pow/www.myapp
とかもできるっぽい。

んーて事はブラウザから http://localhost/ 叩くとどうなるんだろう??

あらステキ♪

ちなみに default という名前のsym linkを作ると、それがlocalhostで表示されるって
Pow User's Manual に書いてある夢を見た


あれ、まてよ。外にも公開されてんのかな???

[hana-da@kikyo(17:14:34) tmp]$ curl -I satsuki
HTTP/1.1 200 OK
Content-Type: text/html; charset=utf8
X-Pow-Template: welcome
Connection: keep-alive

ほー外からも見えるんだ。


ま、いっか。

じゃーRailsでやってみる

Rails 3.0.10でやってみようかな

satsuki:Rails hana-da$ rvm 1.8.7@Rails_3.0.10
satsuki:Rails hana-da$ rails -v
Rails 3.0.10

切替え完了!
RVM最高!!


rails newする

satsuki:Rails hana-da$ rails new myapp
      create  
      create  README
      create  Rakefile
      create  config.ru
      create  .gitignore
      create  Gemfile
:

からの

bundle install

satsuki:myapp hana-da$ bundle install
Fetching source index for http://rubygems.org/
Using rake (0.9.2) 
Using abstract (1.0.0) 
:
Using rails (3.0.10) 
Installing sqlite3 (1.3.4) with native extensions 
Your bundle is complete! Use `bundle show [gemname]` to see where a bundled gem is installed.

なんか便利な気がする。


で、シンボリックリンクを~/.powに張って

satsuki:myapp hana-da$ cd ../
satsuki:Rails hana-da$ ln -s myapp ~/.pow/


ブラウザでmyapp.devをたたくと???

ステキな画面が。。。。ありがとうございました。

なんでよ?

satsuki:myapp hana-da$ ls -la ~/.pow/
total 8
drwxr-xr-x  3 hana-da  staff  102  8 19 17:30 .
drwxr-xr-x  5 hana-da  staff  170  8 19 16:43 ..
lrwxr-xr-x  1 hana-da  staff    5  8 19 17:30 myapp -> myapp
satsuki:myapp hana-da$ cd ~/.pow/myapp 
-bash: cd: /Users/hana-da/.pow/myapp: Too many levels of symbolic links

はい。私がアフォでした。unixの基本もわかってませんでした。ごめんなさい。


やりなおします。

satsuki:myapp hana-da$ rm ~/.pow/myapp 
satsuki:myapp hana-da$ ln -s ~/Documents/Development/Rails/myapp ~/.pow

で、$ open http://myapp.dev/ とかする。

ご乗車ありがとうございます!!!!


やー簡単簡単ワロスワロス

もうちょっと作りこんでみる

satsuki:myapp hana-da$ rails generate scaffold Blog title:string body:text
      invoke  active_record
      create    db/migrate/20110819084614_create_blogs.rb
:

とかやって


db:migrate

satsuki:myapp hana-da$ rake db:migrate
==  CreateBlogs: migrating ====================================================
-- create_table(:blogs)
   -> 0.0012s
==  CreateBlogs: migrated (0.0013s) ===========================================


あ、index.html消しとかなきゃな

satsuki:myapp hana-da$ rm public/index.html 


で、この辺で
$ open http://myapp.dev

マジポ?!!!


うーん。webrickだとどうなんだろう

satsuki:myapp hana-da$ rails server
=> Booting WEBrick
=> Rails 3.0.10 application starting in development on http://0.0.0.0:3000
=> Call with -d to detach
=> Ctrl-C to shutdown server
[2011-08-19 17:52:55] INFO  WEBrick 1.3.1
[2011-08-19 17:52:55] INFO  ruby 1.8.7 (2011-06-30) [i686-darwin11.0.0]
[2011-08-19 17:52:55] INFO  WEBrick::HTTPServer#start: pid=1928 port=3000

して


$ open http://localhost:3000

動いた。。。


はいはい。わかってます。
Pow User's Manual読みます。

Powはrvmを使った異なるバージョンのRuby配下で走るアプリをフルサポートしてだぜ!やっほい。すげーだろ

って書いてあります。


うごかねーYO!


と、おもったら

.rvmrc をアプリケーションrootに置くだけイケるよん
ちなみに .rvmrc の中身はrvm use 1.9.2 がいいんなら
rvm 1.9.2
とか書いとくといいよん。
あとrvm使ってない環境だったらPowはちゃんと.rvmrc無視するよん

って書いてあった。いたれるつくせる。


では早速おまじないを

satsuki:myapp hana-da$ echo 'rvm 1.8.7@Rails_3.0.10' > .rvmrc

して


$ open http://myapp.dev

感動した。


.rvmrcってRVMの機能なんだっけPowの機能なんだっけ。。。。
RVMのような気がするけど。。。今度調べとこ。

で、えーっと何だっけ

あ、ルーティングね。
$ vi config/routes.rb
って何だこれ。。。私、 Rails 1.2.3 から来たんですけど。意味不明なんですけど。ウケルー。
という程じゃないか。。。。


root :to => blogs#index


とか追加しとけばいいかな


$ open http://myapp.dev

おおお。キタキタおやじ


ブログを書いてみる

いい感じっす。


コードを書換えても自動的に再読み込みしてくれるみたいね

満足した。


ちなみに

satsuki:myapp hana-da$ cd ~/Library/Logs/Pow/
satsuki:Pow hana-da$ ls -la
total 16
drwxr-xr-x   4 hana-da  staff   136  8 19 17:47 .
drwx------+ 15 hana-da  staff   510  8 19 16:44 ..
-rw-r--r--   1 hana-da  staff  7959  8 19 18:12 access.log
drwxr-xr-x   3 hana-da  staff   102  8 19 17:47 apps

な感じで


access.log が

satsuki:Pow hana-da$ tail access.log 
[Fri, 19 Aug 2011 09:10:50 GMT] INFO [127.0.0.1] GET myapp.dev /javascripts/controls.js?1313742425
[Fri, 19 Aug 2011 09:10:50 GMT] INFO [127.0.0.1] GET myapp.dev /javascripts/application.js?1313742425
[Fri, 19 Aug 2011 09:12:42 GMT] INFO [127.0.0.1] GET myapp.dev /blogs
[Fri, 19 Aug 2011 09:12:42 GMT] INFO [127.0.0.1] GET myapp.dev /javascripts/effects.js?1313742425
[Fri, 19 Aug 2011 09:12:42 GMT] INFO [127.0.0.1] GET myapp.dev /javascripts/prototype.js?1313742425
[Fri, 19 Aug 2011 09:12:42 GMT] INFO [127.0.0.1] GET myapp.dev /stylesheets/scaffold.css?1313743574
[Fri, 19 Aug 2011 09:12:42 GMT] INFO [127.0.0.1] GET myapp.dev /javascripts/controls.js?1313742425
[Fri, 19 Aug 2011 09:12:42 GMT] INFO [127.0.0.1] GET myapp.dev /javascripts/dragdrop.js?1313742425
[Fri, 19 Aug 2011 09:12:42 GMT] INFO [127.0.0.1] GET myapp.dev /javascripts/rails.js?1313742425
[Fri, 19 Aug 2011 09:12:42 GMT] INFO [127.0.0.1] GET myapp.dev /javascripts/application.js?1313742425

な感じ。


さらに

satsuki:Pow hana-da$ cd apps/
satsuki:apps hana-da$ ls -la
total 8
drwxr-xr-x  3 hana-da  staff  102  8 19 17:47 .
drwxr-xr-x  4 hana-da  staff  136  8 19 17:47 ..
-rw-r--r--  1 hana-da  staff  183  8 19 18:03 myapp.log



satsuki:apps hana-da$ tail myapp.log 
[Fri, 19 Aug 2011 08:47:07 GMT] DEBUG nack worker 1917 spawned
[Fri, 19 Aug 2011 08:47:07 GMT] DEBUG nack worker exited
[Fri, 19 Aug 2011 09:03:08 GMT] DEBUG nack worker 2010 spawned

とかだった。




めでたし、めでたす。*1

*1:JSTにするにはどうすんだ?

LionにRails3の開発環境を構築するよ (その3)

LionにRails3の開発環境を構築するよ (その2) - 日々此妄想 に引き続き第3回目
RVMと ruby-1.8.7-p352, ruby-1.9.2-p290 [ x86_64 ] のインストールまで終ったので次はgemsetとやらをごにょごにょしてみる


gemsetsとはなんぞや

公式https://rvm.beginrescueend.com/gemsets/ を読む

公式https://rvm.beginrescueend.com/gemsets/basics/に基本的な事が書いてある模様


かいつまむと rvm で異なるrubyを切替えて使う事ができる。
で、その選択したrubyの中でgemを色々入れるわけだけど、gemsetsを使うと色々入れるgemをグルーピングしてそれも切替えられるという事みたい。


rvmのgemsetを使ってRails3の開発環境を整える - 4.5帖の生活 こういうカオスな状態を打開できるって事みたい。



RC版やちょっと入れてみたいgemなんかも別のgemsetにガンガン ぶっこんで気に入らなかったらgemsetを消しちゃえばサッパリするって事だと妄想する


ではさっそくgemsetを作ってみる。。。

satsuki:~ hana-da$ rvm use default
Now using system ruby.
satsuki:~ hana-da$ rvm gemset list

gemsets for system (found in /Users/hana-da/.rvm/gems/system)
   *

こんな状態


1.8.7に切替えると

satsuki:~ hana-da$ rvm use 1.8.7
Using /Users/hana-da/.rvm/gems/ruby-1.8.7-p352

お! こういう切替えができるのかステキ☆

satsuki:~ hana-da$ rvm 1.8.7
satsuki:~ hana-da$ ruby -v
ruby 1.8.7 (2011-06-30 patchlevel 352) [i686-darwin11.0.0]

これもアリか! つくずくステキ☆☆



でもってgemset listは

satsuki:~ hana-da$ rvm gemset list

gemsets for ruby-1.8.7-p352 (found in /Users/hana-da/.rvm/gems/ruby-1.8.7-p352)
   global

globalっていうgemsetができてる。

rvm install すると global な gemset が勝手にできる模様


で、

satsuki:~ hana-da$ rvm gemdir
/Users/hana-da/.rvm/gems/ruby-1.8.7-p352

あ、globalだとそこなのね。

GEM_PATHは?

satsuki:~ hana-da$ echo $GEM_PATH
/Users/hana-da/.rvm/gems/ruby-1.8.7-p352:/Users/hana-da/.rvm/gems/ruby-1.8.7-p352@global

んー。2つ?


シンボリックリンクか何かなのかな?

satsuki:~ hana-da$ file /Users/hana-da/.rvm/gems/ruby-1.8.7-p352
/Users/hana-da/.rvm/gems/ruby-1.8.7-p352: directory
satsuki:~ hana-da$ file /Users/hana-da/.rvm/gems/ruby-1.8.7-p352@global
/Users/hana-da/.rvm/gems/ruby-1.8.7-p352@global: directory

別物なんだ。


と、なると今、本当に@globalなのか気になるな。。。

satsuki:~ hana-da$ rvm gemset name
/Users/hana-da/.rvm/gems/ruby-1.8.7-p352

あれ?@globalじゃないんだ。へーへーへー


インスコ済のgemってあるのかな?

satsuki:~ hana-da$ gem list

*** LOCAL GEMS ***

rake (0.9.2 ruby)

あ、rakeが入ってる。そういやrubyを入れるとrakeも入れてくれると どっかで見たような。。。


じゃぁ@globalには何か入ってるのかな?
gemset切替え

satsuki:~ hana-da$ rvm gemset use global

あれ、切替えましたよとか何も出ないのか。。。


じゃぁ確認してみる

satsuki:~ hana-da$ rvm gemset name
global

よしよし@globalだ


で、中身は?

satsuki:~ hana-da$ gem list

*** LOCAL GEMS ***

rake (0.9.2)

一緒だった。


あれ?
で、どうやって元のgemsetに戻すんだ? default?

satsuki:~ hana-da$ rvm gemset use default
ERROR: Gemset 'default' does not exist, rvm gemset create 'default' first.

おこられた。。。


gemset listしてみる

satsuki:~ hana-da$ rvm gemset list

gemsets for ruby-1.8.7-p352 (found in /Users/hana-da/.rvm/gems/ruby-1.8.7-p352)
=> global

あ、gemset list でも今どのgemsetを使ってるのか判るんだ。。。
ってか最初はなんだったんだよぉおぉぉ


gemdirは?

satsuki:~ hana-da$ rvm gemdir
/Users/hana-da/.rvm/gems/ruby-1.8.7-p352@global

当然gemdirも@global


GEM_PATHは?

satsuki:~ hana-da$ echo $GEM_PATH
/Users/hana-da/.rvm/gems/ruby-1.8.7-p352@global:/Users/hana-da/.rvm/gems/ruby-1.8.7-p352@global

GEM_PATHからも@なしが消えた。。。

でも2つPATHがあった理由がちょっとわかった@globalはどのgemsetを使っててもloadされるわけね。



で、いろいろやってると

satsuki:~ hana-da$ rvm gemset use global
satsuki:~ hana-da$ rvm gemset name
global
satsuki:~ hana-da$ rvm use system
Now using system ruby.
satsuki:~ hana-da$ rvm use 1.8.7
Using /Users/hana-da/.rvm/gems/ruby-1.8.7-p352
satsuki:~ hana-da$ rvm gemset name
/Users/hana-da/.rvm/gems/ruby-1.8.7-p352
satsuki:~ hana-da$ rvm gemset list

gemsets for ruby-1.8.7-p352 (found in /Users/hana-da/.rvm/gems/ruby-1.8.7-p352)
   global

rubyを切替えると戻った。
ふむふむ。なるほどそういう事か。


defaultのgemsetを@globalにしたい気がする

satsuki:~ hana-da$ rvm gemset use global --default

かな?


ruby を systemに一旦戻して、また1.8.7に切替えてgemset listを確認してみる

satsuki:~ hana-da$ rvm system
satsuki:~ hana-da$ rvm 1.8.7
satsuki:~ hana-da$ rvm gemset list

gemsets for ruby-1.8.7-p352 (found in /Users/hana-da/.rvm/gems/ruby-1.8.7-p352)
   global

違うっぽい。


じゃーどっかでみたこの方法

satsuki:~ hana-da$ rvm use 1.8.7@global --default
Using /Users/hana-da/.rvm/gems/ruby-1.8.7-p352 with gem set global

かな?


で、確認

satsuki:~ hana-da$ rvm gemset name
global
satsuki:~ hana-da$ rvm system
satsuki:~ hana-da$ rvm 1.8.7
satsuki:~ hana-da$ rvm gemset name
/Users/hana-da/.rvm/gems/ruby-1.8.7-p352

違うっぽい。


でも、一回logoutすると。。。

satsuki:~ hana-da$ ruby -v
ruby 1.8.7 (2011-06-30 patchlevel 352) [i686-darwin11.0.0]
satsuki:~ hana-da$ rvm gemset name
global

だよねー。そうだよねー。
でもdefaultのrubyがrvmで入れたrubyってのは標準大好きっ子なので ちょっとイヤ


systemに戻す

satsuki:~ hana-da$ rvm use system --default
Now using system ruby.
Now using system ruby.

なぜ2行?


logoutして、確認

satsuki:~ hana-da$ ruby -v
ruby 1.8.7 (2010-01-10 patchlevel 249) [universal-darwin11.0]
satsuki:~ hana-da$ rvm gemset name
/Library/Ruby/Gems/1.8
satsuki:~ hana-da$ rvm 1.8.7
satsuki:~ hana-da$ rvm gemset name
/Users/hana-da/.rvm/gems/ruby-1.8.7-p352

戻った


まーでもrubyを切替えた時に選択されているgemsetが@globalって必要はない気がする。
というか、そうするとたぶん使いにくいと思うので、これはこれでヨシとする

やっとgemsetをつくってみる

さて、ではgemsetを作ってrailsを。。。ってversion何を入れよう。。。今の最新って何だっけ???浦島太郎だ。
gemsetの名前をrails[version]にしたいから入れたいものが決まらないとgemsetつくれないお。。。


gemコマンドのおさらいするか。


とりあえずrailのversion一覧が欲しいなぁ。。。
gem listだっけ?

satsuki:~ hana-da$ gem list -r rails

*** REMOTE GEMS ***

rails (3.0.10)
rails-3-settings (0.1.1)
:

出てきすぎ。。。。しかも最新版だけか。


ちなみに gem list は前方一致(start_with)でgem searchは部分一致(contains)なのね

satsuki:~ hana-da$ gem list -r rails | wc -l
     206
satsuki:~ hana-da$ gem search -r rails | wc -l
     594

ふむ。どうでもいいw


exact matchはどうやるんだー。
マニュアルhttp://docs.rubygems.org/read/book/2嫁てか。

gem query -n [正規表現] が可能っぽい

satsuki:~ hana-da$ gem query -rn '^rails$'

*** REMOTE GEMS ***

rails (3.0.10)

あらステキ


んーでも過去のバージョンをひっぱってくる方法がわからん。。。
公式にも書いてない。。。
で、苦しまぎれに gem help

satsuki:~ hana-da$ gem help list
Usage: gem list [STRING] [options]

  Options:
    -i, --[no-]installed             Check for installed gem
    -v, --version VERSION            Specify version of gem to list
                                     for use with --installed
    -d, --[no-]details               Display detailed information of gem(s)
        --[no-]versions              Display only gem names
    -a, --all                        Display all gem versions
        --[no-]prerelease            Display prerelease versions
:

あんじゃん。--allじゃん。

satsuki:~ hana-da$ gem help query
Usage: gem query [options]

  Options:
    -i, --[no-]installed             Check for installed gem
    -v, --version VERSION            Specify version of gem to query
                                     for use with --installed
    -n, --name-matches REGEXP        Name of gem(s) to query on matches the
                                     provided REGEXP
    -d, --[no-]details               Display detailed information of gem(s)
        --[no-]versions              Display only gem names
    -a, --all                        Display all gem versions
        --[no-]prerelease            Display prerelease versions
:

gem query にもあんじゃんw



と、いう事でrailsを調べる

satsuki:~ hana-da$ gem query -ran '^rails$'

*** REMOTE GEMS ***

rails (3.0.10, 3.0.9, 3.0.8, 3.0.7, 3.0.6, 3.0.5, 3.0.4, 3.0.3, 3.0.2, 3.0.1, 3.0.0, 2.3.14, 2.3.12, 
2.3.11, 2.3.10, 2.3.9, 2.3.8, 2.3.7, 2.3.6, 2.3.5, 2.3.4, 2.3.3, 2.3.2, 2.2.3, 2.2.2, 2.1.2, 2.1.1, 
2.1.0, 2.0.5, 2.0.4, 2.0.2, 2.0.1, 2.0.0, 1.2.6, 1.2.5, 1.2.4, 1.2.3, 1.2.2, 1.2.1, 1.2.0, 1.1.6, 
1.1.5, 1.1.4, 1.1.3, 1.1.2, 1.1.1, 1.1.0, 1.0.0, 0.14.4, 0.14.3, 0.14.2, 0.14.1, 0.13.1, 0.13.0, 
0.12.1, 0.12.0, 0.11.1, 0.11.0, 0.10.1, 0.10.0, 0.9.5, 0.9.4.1, 0.9.4, 0.9.3, 0.9.2, 0.9.1, 
0.9.0, 0.8.5, 0.8.0)

ふぅ。道のり長かった。


と、いう事で3系は3.0.10で2系は2.3.14だな。

ちなみに使った事あるのは1.2.3w

本当にgemsetを作る

あとは簡単。。。な、はず。
1.8.7にして

satsuki:~ hana-da$ rvm use 1.8.7
Using /Users/hana-da/.rvm/gems/ruby-1.8.7-p352

うむ


rails_2.3.14というgemsetとrails_3.0.10というgemsetを一気に作る

satsuki:~ hana-da$ rvm gemset create rails_2.3.14 rails_3.0.10
ERROR: Gemset 'rails_3.0.10' does not exist, rvm gemset create 'rails_3.0.10' first.
'rails_2.3.14' gemset created (/Users/hana-da/.rvm/gems/ruby-1.8.7-p352@rails_2.3.14).
'rails_3.0.10' gemset created (/Users/hana-da/.rvm/gems/ruby-1.8.7-p352@rails_3.0.10).

ん???
なんか怒られたけど。。。できた?


確認する

satsuki:~ hana-da$ rvm gemset list

gemsets for ruby-1.8.7-p352 (found in /Users/hana-da/.rvm/gems/ruby-1.8.7-p352)
   global
   rails_2.3.14
   rails_3.0.10

できてるっぽい。

勢いにのってrailsも!!!

じゃぁまず2.3.14から

ruby 1.8.7を選択

satsuki:~ hana-da$ rvm use 1.8.7
Using /Users/hana-da/.rvm/gems/ruby-1.8.7-p352

よし


んで gemset rails_2.3.14を選択

satsuki:~ hana-da$ rvm gemset use rails_2.3.14

だんまりっ子なので、確認する

satsuki:~ hana-da$ rvm gemset list

gemsets for ruby-1.8.7-p352 (found in /Users/hana-da/.rvm/gems/ruby-1.8.7-p352)
   global
=> rails_2.3.14
   rails_3.0.10


じゃーrails入れるお

satsuki:~ hana-da$ gem install rails --version=2.3.14
Fetching: activesupport-2.3.14.gem (100%)
Fetching: activerecord-2.3.14.gem (100%)
Fetching: rack-1.1.2.gem (100%)
Fetching: actionpack-2.3.14.gem (100%)
Fetching: actionmailer-2.3.14.gem (100%)
Fetching: activeresource-2.3.14.gem (100%)
Fetching: rails-2.3.14.gem (100%)
Successfully installed activesupport-2.3.14
Successfully installed activerecord-2.3.14
Successfully installed rack-1.1.2
Successfully installed actionpack-2.3.14
Successfully installed actionmailer-2.3.14
Successfully installed activeresource-2.3.14
Successfully installed rails-2.3.14
7 gems installed
Installing ri documentation for activesupport-2.3.14...
:

はいった。
てかriとrdocもはいった。さすがにriとrdocはいらんかったな。。。

satsuki:~ hana-da$ rails -v
Rails 2.3.14

おさげ。

で、3.0.10

特に何も問題なかったので割愛w


の、予定だったけどrails3はbundle installするのがナウイらしい
Rails3 を Bundler でインストールする - How to Install Rails3 by Bundler - bekkou68 の日記 この辺を参考に。。。

bundlerを@globalに入れちゃう
これで@globalの恩恵を味わってみる

satsuki:~ hana-da$ rvm use 1.8.7
Using /Users/hana-da/.rvm/gems/ruby-1.8.7-p352
satsuki:~ hana-da$ rvm gemset use global
satsuki:~ hana-da$ rvm gemset list

gemsets for ruby-1.8.7-p352 (found in /Users/hana-da/.rvm/gems/ruby-1.8.7-p352)
=> global
   rails_2.3.14
   rails_3.0.10

だいぶ慣れてきた


で、gem install bundler

satsuki:~ hana-da$ gem install bundler
Fetching: bundler-1.0.18.gem (100%)
Successfully installed bundler-1.0.18
1 gem installed
Installing ri documentation for bundler-1.0.18...
Installing RDoc documentation for bundler-1.0.18...

あ、またriとrdocいれちまった。。。


gemset を rails_3.0.10 に切替えて確認

satsuki:~ hana-da$ rvm gemset use rails_3.0.10
satsuki:~ hana-da$ gem list

*** LOCAL GEMS ***

bundler (1.0.18)
rake (0.9.2)

おーすげー


で、railsのプロジェクトディレクトリに移動し bundle install

satsuki:Rails hana-da$ cd bundle_1st/
satsuki:bundle_1st hana-da$ ls
satsuki:bundle_1st hana-da$ bundle install
Could not locate Gemfile

で怒られるw


という事で bundle init

satsuki:bundle_1st hana-da$ bundle init
Writing new Gemfile to /Users/hana-da/Documents/Development/Rails/bundle_1st/Gemfile
satsuki:bundle_1st hana-da$ ls
Gemfile
satsuki:bundle_1st hana-da$ cat Gemfile 
# A sample Gemfile
source "http://rubygems.org"

# gem "rails"

でけた


最新版のrailが入るように、おまじないして bundle install

satsuki:bundle_1st hana-da$ echo 'gem "rails"' >> Gemfile
satsuki:bundle_1st hana-da$ bundle install
Fetching source index for http://rubygems.org/
Using rake (0.9.2) 
Installing abstract (1.0.0) WARNING: abstract-1.0.0 has an invalid nil value for @cert_chain

Installing activesupport (3.0.10) 
Installing builder (2.1.2) WARNING: builder-2.1.2 has an invalid nil value for @cert_chain

Installing i18n (0.5.0) 
Installing activemodel (3.0.10) 
Installing erubis (2.6.6) 
Installing rack (1.2.3) 
Installing rack-mount (0.6.14) 
Installing rack-test (0.5.7) 
Installing tzinfo (0.3.29) 
Installing actionpack (3.0.10) 
Installing mime-types (1.16) 
Installing polyglot (0.3.2) 
Installing treetop (1.4.10) 
Installing mail (2.2.19) 
Installing actionmailer (3.0.10) 
Installing arel (2.0.10) 
Installing activerecord (3.0.10) 
Installing activeresource (3.0.10) 
Using bundler (1.0.18) 
Installing rdoc (3.9.2) 
Installing thor (0.14.6) 
Installing railties (3.0.10) 
Installing rails (3.0.10) 
Your bundle is complete! Use `bundle show [gemname]` to see where a bundled gem is installed.

ステキな予感


gem listしてみる

satsuki:bundle_1st hana-da$ gem list

*** LOCAL GEMS ***

abstract (1.0.0)
actionmailer (3.0.10)
actionpack (3.0.10)
activemodel (3.0.10)
activerecord (3.0.10)
:

キタキター


そして謎のファイルが出きている

satsuki:bundle_1st hana-da$ ls
Gemfile		Gemfile.lock

Gemfile.lockって何だ?
まぁいいか。

確認タイム☆

satsuki:~ hana-da$ rvm use 1.8.7@rails_2.3.14 && rails -v
Using /Users/hana-da/.rvm/gems/ruby-1.8.7-p352 with gemset rails_2.3.14
Rails 2.3.14
satsuki:~ hana-da$ rvm use 1.8.7@rails_3.0.10 && rails -v
Using /Users/hana-da/.rvm/gems/ruby-1.8.7-p352 with gemset rails_3.0.10
Rails 3.0.10

惚れた♪

LionにRails3の開発環境を構築するよ (その2)

LionにRails3の開発環境を構築するよ (その1) - 日々此妄想 に引き続きます。

とりあえず、やっぱ最新のRuby1.9だよね。

って事で使うかどうかわかんないけど、Rails3.1は1.9推奨(必須?)になるらしいので入れとく


。。。えっと。。。。何したらいいんだっけ。。。。

satsuki:~ hana-da$ rvm list help

  Usage:

    rvm list [action]

  Actions:

  {help,known,gemsets,default [string],rubies,strings,known_strings,ruby_svn_tags}

んー。素直に rvm list knownから選ぶか。。。

satsuki:~ hana-da$ rvm list known
# MRI Rubies
[ruby-]1.8.6[-p420]
[ruby-]1.8.6-head
[ruby-]1.8.7[-p352]
[ruby-]1.8.7-head
[ruby-]1.9.1-p378
[ruby-]1.9.1[-p431]
[ruby-]1.9.1-head
[ruby-]1.9.2-p180
[ruby-]1.9.2[-p290]
[ruby-]1.9.2-head
[ruby-]1.9.3[-preview1]
[ruby-]1.9.3-head
ruby-head

あれ。。。1.9.3ってのもあるのか。。。最近おっかけてないから全然わからん。。。


本家ダウンロードによると1.9系の安定板は最新のruby 1.9.2-p290らしいので、それにする

satsuki:~ hana-da$ rvm install 1.9.2
Installing Ruby from source to: /Users/hana-da/.rvm/rubies/ruby-1.9.2-p290, this may take a while depending on your cpu(s)...
:
Extracting rubygems-1.8.6 ...
Removing old Rubygems files...
Installing rubygems-1.8.6 for ruby-1.9.2-p290 ...
Installation of rubygems completed successfully.
ruby-1.9.2-p290 - adjusting #shebangs for (gem irb erb ri rdoc testrb rake).
ruby-1.9.2-p290 - #importing default gemsets (/Users/hana-da/.rvm/gemsets/)
Install of ruby-1.9.2-p290 - #complete 

てか rvm list known を良くみると 1.9.2 って入れれば p290 になるんじゃん。


そういえば CC=/usr/bin/gcc-4.2 しなかったけど complete したな。。。
ウワサでは1.8.7 の時は必要って聞こえてきたけど。。。後で試す

1.9.2インスコ

えっと、何すればいいんだ。。。

satsuki:~ hana-da$ rvm list

rvm rubies

   ruby-1.9.2-p290 [ x86_64 ]



切替えてみる

satsuki:~ hana-da$  ruby -v
ruby 1.8.7 (2010-01-10 patchlevel 249) [universal-darwin11.0]

からの


satsuki:~ hana-da$ rvm use 1.9.2
Using /Users/hana-da/.rvm/gems/ruby-1.9.2-p290

1.92


satsuki:~ hana-da$ ruby -v
ruby 1.9.2p290 (2011-07-09 revision 32553) [x86_64-darwin11.0.0]
satsuki:~ hana-da$ which ruby
/Users/hana-da/.rvm/rubies/ruby-1.9.2-p290/bin/ruby

おー



satsuki:~ hana-da$ rvm use default
Now using system ruby.

とかで戻るかな?


satsuki:~ hana-da$ ruby -v
ruby 1.8.7 (2010-01-10 patchlevel 249) [universal-darwin11.0]
satsuki:~ hana-da$ which ruby
/usr/bin/ruby

期待を裏切らない動作です。ありがとうございました。


調子にのって1.8.7も入れてみる

一応最初から入ってるのも1.8.7だけどp249なのでp352を入れる

satsuki:~ hana-da$ rvm install 1.8.7
Installing Ruby from source to: /Users/hana-da/.rvm/rubies/ruby-1.8.7-p352, this may take a while depending on your cpu(s)...
:
ruby-1.8.7-p352 - #installing 
Removing old Rubygems files...
Installing rubygems-1.8.6 for ruby-1.8.7-p352 ...
Installation of rubygems completed successfully.
ruby-1.8.7-p352 - adjusting #shebangs for (gem irb erb ri rdoc testrb rake).
ruby-1.8.7-p352 - #importing default gemsets (/Users/hana-da/.rvm/gemsets/)
Install of ruby-1.8.7-p352 - #complete 

キター

てかCCを設定しなくても入るじゃんw



かくにんかくにん

satsuki:~ hana-da$ rvm list

rvm rubies

   ruby-1.8.7-p352 [ x86_64 ]
   ruby-1.9.2-p290 [ x86_64 ]

増えた。わーい。


satsuki:~ hana-da$ ruby -v
ruby 1.8.7 (2011-06-30 patchlevel 352) [i686-darwin11.0.0]
satsuki:~ hana-da$ rvm gemdir
/Users/hana-da/.rvm/gems/ruby-1.8.7-p352

はふはふ


satsuki:~ hana-da$ rvm use default
Now using system ruby.
satsuki:~ hana-da$ ruby -v
ruby 1.8.7 (2010-01-10 patchlevel 249) [universal-darwin11.0]

にゃんにゃん。


さーて

次はGemだ。GemSetsって何それウマイの?
LionにRails3の開発環境を構築するよ (その3) - 日々此妄想

LionにRails3の開発環境を構築するよ (その1)

MacBookの時は怖くてできなかったMac上へのRails開発環境構築。

今までRailsの開発はVineLinux上でやってたんだけど。。。

$ cat /etc/issue

Vine Linux 4.2 (Lynch Bages)
Kernel 2.6.16-76.51vl4 on an i686

$ rpm -q glibc
glibc-2.3.4-2vl3.3

$ ruby -v
ruby 1.8.5 (2006-08-25) [i386-linux]

$ gem -v
1.3.5

$ rails -v
Rails 2.3.5

OSアップデートなくして これ以上、先に進むのは困難という判断。。。


いままではMacBookがメインマシンだったのでいまいち乗り気になれなかったけど iMac も来た事だし、そろそろ思いきってMac上にRailsの開発環境を構築しようと思う。

Heroku使ってみたいだけなんだけどね。

目指すとこ

とりあえず

  • RVM
  • Rails3

な感じまで目指す

現状調査

satsuki:~ hana-da$ ruby -v
ruby 1.8.7 (2010-01-10 patchlevel 249) [universal-darwin11.0]
satsuki:~ hana-da$ gem -v
1.3.6
satsuki:~ hana-da$ rails -v
Rails is not currently installed on this system. To get the latest version, simply type:

    $ sudo gem install rails

You can then rerun your "rails" command.
satsuki:~ hana-da$ gem list

*** LOCAL GEMS ***

へ? MacOSX って rails 標準搭載じゃなかったっけ?? Lion からかわったのか?

satsuki:~ hana-da$ which rails
/usr/bin/rails
satsuki:~ hana-da$ file /usr/bin/rails
/usr/bin/rails: POSIX shell script text executable

ふむ

satsuki:~ hana-da$ cat /usr/bin/rails 
#!/bin/sh
echo 'Rails is not currently installed on this system. To get the latest version, simply type:'
echo
echo '    $ sudo gem install rails'
echo
echo 'You can then rerun your "rails" command.'

ワロタ

事前情報収集

やっぱり RVM は便利だ! - yuumi3のお仕事日記はリンク先も含めて熟読しとくべきだよね。

インスコ開始

お作法通りやる。ドキドキ。。。

satsuki:~ hana-da$ bash < <(curl -s https://rvm.beginrescueend.com/install/rvm)
Cloning into rvm...
github.com[0: 207.97.227.239]: errno=Operation timed out
fatal: unable to connect a socket (Operation timed out)
Cloning into rvm...
remote: Counting objects: 21938, done.
remote: Compressing objects: 100% (5768/5768), done.
remote: Total 21938 (delta 14947), reused 21552 (delta 14590)
Receiving objects: 100% (21938/21938), 3.82 MiB | 701 KiB/s, done.
Resolving deltas: 100% (14947/14947), done.
:
Installation of RVM to /Users/hana-da/.rvm/ is complete.
:

githubからひっぱってこれなかったようだけど、なんかよしなにうまくやってくれたっぽい。


で、

表示されたメッセージのとおり

satsuki:~ hana-da$ echo '[[ -s "$HOME/.rvm/scripts/rvm" ]] && . "$HOME/.rvm/scripts/rvm" # Load RVM function' >> ~/.bash_profile

とかして

satsuki:~ hana-da$ . .bash_profile

で、読み込み

satsuki:~ hana-da$ type rvm | head -1
rvm is a function

確認おっけー

注意事項

satsuki:~ hana-da$ rvm notes

  Notes for Darwin ( Mac OS X )
:

後で読むw

てかインスコ完了時に表示されてたメッセージだね。


何が書いてあるかというと Mac OS X での注意事項として

LionではRubyをビルドするのにllvm-gccのかわりにgccを使う必要があるが /usr/bin/gcc は /usr/bin/llvm-gcc-4.2 へのリンクに変更になっているので
export CC=gcc-4.2
を .bash_profile か何かに追加しておけ

との事


Mac OS X Lion でRuby on Railsの開発環境を構築するには - yuumi3のお仕事日記でも触れられてるように

$ CC=/usr/bin/gcc-4.2 rvm install ruby-1.8.7 --force

でもいいみたい。


後で試してみよう。


後は

Snow Leopardの時は Xcode 3.2.1(1613)をdeveloper.apple.comからダウンロードしてインスコしとけ(dvdのやつはbugがある)

との事

  • MacRubyを入れるにはLLVMを先にいれてね
  • JRubyにはJDKが別途必要
  • IronRubyはMonoが別途必要(version 2.6以上が推奨)

が箇条書きの部分



Apple さんがインスコしてくれているシステム付属のruby(ruby 1.8.7 p174 for Snow Leopard)を消すには

  • rvm install 1.8.7 # installs patch 302: closest supported version
  • rvm system ; rvm gemset export system.gems ; rvm 1.8.7 ; rvm gemset import system # migrate your gems
  • rvm --default 1.8.7

するといいんじゃない的な。



あとさらに注意点が書いてあって

ruby 1.7を入れた時、RVMは .rvmrcを自動的に読み込まなくなったので、この機能を使うには
export rvm_project_rvmrc=1
を $HOME/.rvmrc に追加すれ。

みたいな。


以上の和訳は全て妄想なのであまりアテにしちゃだめです。

にやにやする

satsuki:~ hana-da$ rvm list known
# MRI Rubies
[ruby-]1.8.6[-p420]
[ruby-]1.8.6-head
[ruby-]1.8.7[-p352]
[ruby-]1.8.7-head
[ruby-]1.9.1-p378
[ruby-]1.9.1[-p431]
[ruby-]1.9.1-head
[ruby-]1.9.2-p180
[ruby-]1.9.2[-p290]
[ruby-]1.9.2-head
[ruby-]1.9.3[-preview1]
[ruby-]1.9.3-head
ruby-head

# GoRuby
goruby
:

うほほ

satsuki:~ hana-da$ rvm help | head
= rvm

* http://github.com/wayneeseguin/rvm

== DESCRIPTION:

RVM is the Ruby enVironment Manager (rvm).
It manages Ruby application environments and switching between them.

== Usage

  rvm [Flags] [Options] Action [Implementation[,Implementation[,...]]

== Flags

  --default     - with 'rvm use X', sets the default ruby for new shells to X.
  --debug       - Toggle debug mode on for very verbose output.
  --trace       - Toggle trace mode on to see EVERYTHING rvm is doing.
  --force       - Force install, removes old install & source before install.
  --summary     - Used with rubydo to print out a summary of the commands run.
:

ほほう


では早速Rubyインスコ

しようと思ったけど続きは今度
LionにRails3の開発環境を構築するよ (その2) - 日々此妄想