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になります。
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/
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$
キター
ステキスグル!キンニクスルグ!!!
変更を加える
とりあえず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
さくっといくね♪
という事で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/
なんでよ?
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
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
惚れた♪
参考サイト
- rvmのgemsetを使ってRails3の開発環境を整える - 4.5帖の生活
- RVM の Gem Sets で gemset の管理 - tbrookの日記
- http://d.hatena.ne.jp/Umeyashiki/20101120/1290265604
Thank you!
まだ読んでないけど
rvm 入門 … 複数バージョンの Ruby と Rails を混在させる - まちゅダイアリー(2011-05-21)
が、すげーまとまってる気がする。。。
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がある)
との事
が箇条書きの部分
で 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) - 日々此妄想