management of gems using bundler

24
K-Ruby 資料 K-Ruby 資料 1 © Tamotsu FURUYA, All rights reserved. November 24, 2011 Bundler Bundler やら やら Rails Rails やら基本的なこと やら基本的なこと 鹿児島大学 学術情報基盤センター 学術情報処理研究部門 古屋 保 [email protected] 20111124

Upload: tamotsu-furuya

Post on 24-May-2015

575 views

Category:

Documents


4 download

DESCRIPTION

Bundlerを利用したGem管理

TRANSCRIPT

Page 1: Management of Gems using Bundler

K-Ruby 資料K-Ruby 資料

1© Tamotsu FURUYA, All rights reserved.November 24, 2011

BundlerBundlerやらやらRailsRailsやら基本的なことやら基本的なこと

鹿児島大学 学術情報基盤センター学術情報処理研究部門古屋 保[email protected]

2011年11月24日

Page 2: Management of Gems using Bundler

K-Ruby 資料K-Ruby 資料

2© Tamotsu FURUYA, All rights reserved.November 24, 2011

皆さんご存知の...皆さんご存知の...

https://rvm.beginrescueend.com/

Page 3: Management of Gems using Bundler

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」ファイルを作成し,その中に上記コマンドを記載しておくと,さらに幸せになれる!

Page 4: Management of Gems using Bundler

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の環境で良いかも...

Page 5: Management of Gems using Bundler

K-Ruby 資料K-Ruby 資料

5© Tamotsu FURUYA, All rights reserved.November 24, 2011

今回紹介するのは...今回紹介するのは...

http://gembundler.com/

Page 6: Management of Gems using Bundler

K-Ruby 資料K-Ruby 資料

6© Tamotsu FURUYA, All rights reserved.November 24, 2011

BundlerBundlerについてについて● Bundler

– RubyGemsのラッパー– コマンドは「bundle」– Rails 3 で公式に採用されている gem の管理ツール– 依存関係を調べ,必要な全てのパッケージをインストールして

くれる.– gemを特定のバージョンに固定(指定)できる– アプリケーションごとにgemパッケージを独立して管理するこ

とができる.

Page 7: Management of Gems using Bundler

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

Page 8: Management of Gems using Bundler

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)

Page 9: Management of Gems using Bundler

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"

Page 10: Management of Gems using Bundler

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 のバージョン指定

Page 11: Management of Gems using Bundler

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) :

Page 12: Management of Gems using Bundler

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'

Page 13: Management of Gems using Bundler

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 ディレクトリにインストールされる.

Page 14: Management of Gems using Bundler

K-Ruby 資料K-Ruby 資料

14© Tamotsu FURUYA, All rights reserved.November 24, 2011

まとめまとめ● システムや開発環境単位ではなく,アプリケーション単位で

gemを管理することが可能.● 色々な gem をインストールおよびアップデートしたことに

よるバージョンの不整合が起きる問題が解消される.● バージョンロック(Gemfile.lock)により,決まったgemの

バージョン構成でデプロイできる.● しかし,「bundle exec」を頭につけるのが面倒.

→「Rails_root/bin」を$PATHに追加すれば解決!● アプリケーションフォルダが肥大化してしまう.

→しょうがないかも.

Page 15: Management of Gems using Bundler

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);

Page 16: Management of Gems using Bundler

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 ]

Page 17: Management of Gems using Bundler

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 ]

Page 18: Management of Gems using Bundler

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 ]

Page 19: Management of Gems using Bundler

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 ]

Page 20: Management of Gems using Bundler

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 ]

Page 21: Management of Gems using Bundler

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 ]

Page 22: Management of Gems using Bundler

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 ]

Page 23: Management of Gems using Bundler

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 ]

Page 24: Management of Gems using Bundler

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 ]