Weitere ähnliche Inhalte
Ähnlich wie Management of Gems using Bundler. (20)
Management of Gems using Bundler.
- 1. K-Ruby 資料
BundlerやらRailsやら基本的なこと
2011年11月24日
鹿児島大学 学術情報基盤センター
学術情報処理研究部門
古屋 保
furuya@cc.kagoshima-u.ac.jp
November 24, 2011 © Tamotsu FURUYA, All rights reserved. 1
- 2. K-Ruby 資料
皆さんご存知の...
https://rvm.beginrescueend.com/
November 24, 2011 © Tamotsu FURUYA, All rights reserved. 2
- 3. K-Ruby 資料
RVMについて
● RVM
– バージョン環境を簡単に切り替えられる
$ rvm use ruby-1.9.2
– gemの組合せ(Gemセット)も管理できる
$ rvm gemset use rails3x
– RubyもGemセットも一発で切り換えられる
$ rvm use ruby-1.9.2@rails3x
– ディレクトリ内に「.rvmrc」ファイルを作成し,その中に上記
コマンドを記載しておくと,さらに幸せになれる!
November 24, 2011 © Tamotsu FURUYA, All rights reserved. 3
- 4. K-Ruby 資料
RVMについて
● RVM
– 「.rvm」配下に何か色々作られるのが,どうも...しかも
パスが長い!
– cdコマンドやgemコマンドが何かとすり替えられている.
(別のスクリプトに置き換わっている)
– 「rvmsudo」って何もの?(「sudo rvm …」じゃない
の?)
– もう Ruby 1.9.X onlyの環境で良いかも...
November 24, 2011 © Tamotsu FURUYA, All rights reserved. 4
- 5. K-Ruby 資料
今回紹介するのは...
http://gembundler.com/
November 24, 2011 © Tamotsu FURUYA, All rights reserved. 5
- 6. K-Ruby 資料
Bundlerについて
● Bundler
– RubyGemsのラッパー
– コマンドは「bundle」
– Rails 3 で公式に採用されている gem の管理ツール
– 依存関係を調べ,必要な全てのパッケージをインストールして
くれる.
– gemを特定のバージョンに固定(指定)できる
– アプリケーションごとにgemパッケージを独立して管理するこ
とができる.
November 24, 2011 © Tamotsu FURUYA, All rights reserved. 6
- 7. K-Ruby 資料
Bundlerの導入
● まずは,RVMの削除
$ rvm seppuku
$ rm -rf ~/.rvmrc
.bashrc あるいは .bash_profile に記述してある rvm スクリ
プトのロード部分を削除
●
次に,gem をアンインストールしていく
$ gem uninstall hogehoge
● 全ての gem をアンインストール(全部消える)
$ gem list | cut -d " " -f1 | sudo xargs gem uninstall
November 24, 2011 © Tamotsu FURUYA, All rights reserved. 7
- 8. K-Ruby 資料
Bundlerの導入
● Bundlerをインストール
$ sudo gem install bundler
$ gem list
*** LOCAL GEMS ***
Bundler (1.0.21)
November 24, 2011 © Tamotsu FURUYA, All rights reserved. 8
- 9. K-Ruby 資料
BundlerによるRailsアプリ作成
● Railsアプリ用のディレクトリを作成する
$ mkdir myapp
●
作成したディレクトリに移動し,Gemfileを作成
$ bundle init
● Gemfileを編集する
source "http://rubygems.org"
gem "rails", "3.0.11"
November 24, 2011 © Tamotsu FURUYA, All rights reserved. 9
- 10. K-Ruby 資料
BundlerによるRailsアプリ作成
● インストールする gem のバージョン指定
gem "nokogiri"
gem "rails", "3.0.0.beta3"
gem "rack", ">=1.0"
gem "thin", "~>1.1"
November 24, 2011 © Tamotsu FURUYA, All rights reserved. 10
- 11. K-Ruby 資料
BundlerによるRailsアプリ作成
● gemファイルのインストールパスを指定してbundle install
$ bundle install –-path vendor/bundle
– 「vendor/bundle/ruby/1.9.1/」配下にgemがインストール
– gemの依存関係を記述した Gemfile.lock が生成
GEM
remote: http://rubygems.org/
specs:
abstract (1.0.0)
actionmailer (3.0.11)
actionpack (= 3.0.11)
mail (~> 2.2.19)
actionpack (3.0.11)
activemodel (= 3.0.11)
activesupport (= 3.0.11)
:
November 24, 2011 © Tamotsu FURUYA, All rights reserved. 11
- 12. K-Ruby 資料
BundlerによるRailsアプリ作成
● Railsのスケルトン作成
$ bundle exec rails new .
●
再度(2度目はパスの指定なしでOK)
$ bundle install
● その理由...「.bundle/config」ファイル
BUNDLE_PATH: vendor/bundle
BUNDLE_DISABLE_SHARED_GEMS: '1'
November 24, 2011 © Tamotsu FURUYA, All rights reserved. 12
- 13. K-Ruby 資料
BundlerによるRailsアプリ作成
● 全てのgemコマンドの実行の際,頭に「bundle exec」を付
加する必要がある.
– $ bundle exec rails
– $ bundle exec rake
– $ bundle exec irb
● 「$ bundle install –-binstubs」と実行すると rails,rake, irb
などのコマンドが ./bin ディレクトリにインストールされ
る.
November 24, 2011 © Tamotsu FURUYA, All rights reserved. 13
- 14. K-Ruby 資料
まとめ
●
システムや開発環境単位ではなく,アプリケーション単位で
gemを管理することが可能.
●
色々な gem をインストールおよびアップデートしたことに
よるバージョンの不整合が起きる問題が解消される.
● バージョンロック(Gemfile.lock)により,決まったgemの
バージョン構成でデプロイできる.
●
しかし,「bundle exec」を頭につけるのが面倒.
→「Rails_root/bin」を$PATHに追加すれば解決!
●
アプリケーションフォルダが肥大化してしまう.
→しょうがないかも.
November 24, 2011 © Tamotsu FURUYA, All rights reserved. 14
- 15. K-Ruby 資料
実践! (1)まずはDBとテーブルの作成
$ mysql -u root -p
mysql> grant all on my_app_db.* to hoge@localhost
-> identified by 'foobar'
mysql> ¥q
$ mysql -u hoge -p
mysql> create database my_app_db;
mysql> create table students (
-> sid char(10) NOT NULL PRIMARY KEY,
-> name varchar(20),
-> birth date);
November 24, 2011 © Tamotsu FURUYA, All rights reserved. 15
- 16. K-Ruby 資料
(2)Bundlerを使ったRails環境構築
$ mkdir my_app
$ cd my_app
$ bundle init
$ vi Gemfile
$ bundle install --path vendor/bundle
$ bundle install --binstubs
[ Gemfile ]
source "http://rubygems.org"
gem "rails", "3.0.11"
November 24, 2011 © Tamotsu FURUYA, All rights reserved. 16
- 17. K-Ruby 資料
(3)新規アプリ作成とMySQL DBの指定
$ bundle exec rails new . -T -d mysql
(または,$ bin/rails new . -T -d mysql)
$ bundle install
$ vi config/database.yml
[ config/database.yml ]
:
development:
adapter: mysql2
encoding: utf8
database: my_app_db
username: hoge
password: foobar
:
November 24, 2011 © Tamotsu FURUYA, All rights reserved. 17
- 18. K-Ruby 資料
(4)Studentモデル作成(O/R Mapping)
$ bundle exec rails server
$ bundle exec rails generate model Student
$ vi app/models/student.rb
$ bundle exec rails db
$ bundle exec rails console
[ app/models/students.rb ]
class Student < ActiveRecord::Base
set_primary_key 'sid'
end
November 24, 2011 © Tamotsu FURUYA, All rights reserved. 18
- 19. K-Ruby 資料
(5)routingとStudentsコントローラの作成
$ vi config/routes.rb
$ bundle exec rails generate controller Students
$ vi app/controllers/students_controller.rb
[ config/routes.rb ]
MyApp::Application.routes.draw do
match 'lists' => 'students#list'
:
end
[ app/controllers/students_controller.rb ]
lass StudentsController < ApplicationController
def list
end
end
November 24, 2011 © Tamotsu FURUYA, All rights reserved. 19
- 20. K-Ruby 資料
(6)ビューの作成,コントローラとの連携
$ echo "hello" > app/views/students/list.html.erb
$ vi app/controllers/students_controller.rb
$ vi app/views/students/list.html.erb
[ app/controllers/students_controller.rb ]
lass StudentsController < ApplicationController
def list
@students = Student.all
end
end
[ app/views/students/list.html.erb ]
hello<br />
<%= p @students %>
November 24, 2011 © Tamotsu FURUYA, All rights reserved. 20
- 21. K-Ruby 資料
(7)とりあえずレコードの内容を表示
[ app/views/students/list.html.erb ]
<table>
<tr>
<th>Sid</th><th>Name</th><th>Birth</th>
</tr>
<% @students.each do |s| %>
<tr>
<td><%= s.sid %></td>
<td><%= s.name %></td>
<td><%= s.birth %></td>
</tr>
<% end %>
</table>
November 24, 2011 © Tamotsu FURUYA, All rights reserved. 21
- 22. K-Ruby 資料
(8)学生一覧から個人データを表示させる
[ config/routes.rb ]
MyApp::Application.routes.draw do
match 'lists' => 'students#list'
match 'lists/:sid' => 'students#show'
:
end
[ app/controllers/students_controller.rb ]
class StudentsController < ApplicationController
def list
@students = Student.all
end
def show
@student = Student.find(params[:sid])
end
end
November 24, 2011 © Tamotsu FURUYA, All rights reserved. 22
- 23. K-Ruby 資料
(8)学生一覧から個人データを表示させる
[ app/views/students/show.html.erb ]
<table>
<tr><th>Sid</th><td><%= @student.sid %></td></tr>
<tr><th>Name</th><td><%= @student.name %></td></tr>
<tr><th>Birth</th><td><%= @student.birth %></td></tr>
</table>
<%= link_to 'return lists', lists_path %>
[ config/routes.rb ]
MyApp::Application.routes.draw do
match 'lists' => 'students#list'
match 'lists/:sid' => 'students#show', :as => 'list'
:
end
November 24, 2011 © Tamotsu FURUYA, All rights reserved. 23
- 24. K-Ruby 資料
(8)学生一覧から個人データを表示させる
[ app/views/students/list.html.erb ]
<table>
<tr>
<th>Sid</th><th>Name</th><th>Birth</th>
</tr>
<% @students.each do |s| %>
<tr>
<td><%= link_to s.sid, list_path(s.sid) %></td>
<td><%= s.name %></td>
<td><%= s.birth %></td>
</tr>
<% end %>
</table>
November 24, 2011 © Tamotsu FURUYA, All rights reserved. 24