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