44
Ruby in Wheezy Ruby in Wheezy 〜第69関西Debian勉強会〜 佐々木洋平/Youhei SASAKI twitter: @uwabami 2013/02/24 GREE 大阪オフィス セミナールーム

Ruby In Wheezy

Embed Size (px)

DESCRIPTION

第69回関西Debian勉強会で Debian 7.0 Wheezy 以降の Ruby 環境についてお話しました。

Citation preview

Page 1: Ruby In Wheezy

Ruby in WheezyRuby in Wheezy〜第69回 関西Debian勉強会〜

佐々木洋平/Youhei SASAKItwitter: @uwabami

2013/02/24GREE 大阪オフィス セミナールーム

Page 2: Ruby In Wheezy

どーも

Page 3: Ruby In Wheezy

佐々木です

Page 4: Ruby In Wheezy

About me.

Name & Contact:

佐々木洋平/Youhei SASAKI✓

Twitter/Github: uwabami✓

Activity:

Debian JP Project/ 関西 Debian 勉強会✓

Ruby, TeX, Emacs, Scientific Computing...✓

Page 5: Ruby In Wheezy

About me.

Name & Contact:

佐々木洋平/Youhei SASAKI✓

Twitter/Github: uwabami✓

Activity:

Debian JP Project/ 関西 Debian 勉強会✓

Ruby, TeX, Emacs, Scientific Computing...✓

Page 6: Ruby In Wheezy

Ruby...?

Page 7: Ruby In Wheezy

Maintainer Dashboard Debian QA

Maintainer Dashboard@UDD

http://udd.debian.org/dmd.cgi?email1=uwabami%40gfd-dennou.org

Debian Quality Assuarance

http://qa.debian.org/developer.php?login=uwabami%40gfd-dennou.org

Page 8: Ruby In Wheezy

Disclaimer

無保証無責任原則

用法, 用量を守って正しくお使い下さい✓

誤字脱字含め, 適宜ご指摘下されば幸いです.✓

疑問/質問/ツッコミ/茶々, 大歓迎

その場でどうぞ✓

ハッシュタグ: #kansaidebian

Page 9: Ruby In Wheezy

Agenda

Ruby in Wheezy1.

Switch your Ruby2.

gem2deb3.

Debian with Rails4.

Page 10: Ruby In Wheezy

Agenda

Ruby in Wheezy1.

Switch your Ruby2.

gem2deb3.

Debian with Rails4.

Page 11: Ruby In Wheezy

Ruby in Wheezy

Page 12: Ruby In Wheezy

Ruby の実装

Ruby インタープリタには実装が複数ある

MRI1.8.7, MRI1.9.3, JRuby: apt ready!

Rubinius: Work in Progress ITP#591817

mruby: Work in Progress ITP#697835

他に HPC Ruby Compiler, Topaz, etc.

これらを用途の応じて使い分けるには?

Page 13: Ruby In Wheezy

Agenda

Ruby in Wheezy1.

Switch your Ruby2.

gem2deb3.

Debian with Rails4.

Page 14: Ruby In Wheezy

Switch your Ruby?

Debian には update-alternatives がある

同じ機能を提供する複数のソフトウェアを切り替える仕組み

例: vi -> nvi, vim

/usr/bin/ruby の実体は symbolic link

alternatives で管理.

でも ruby 切り替えたら gem とか irb も変えたいよね?

Page 15: Ruby In Wheezy

システム全体で変えるには?

ruby-switch が便利です.

update-aliternatives の wrapper です.

% ruby-switch --list% ruby-switch --set ruby1.9.1% ruby -v% ruby-switch --set ruby1.8% ruby -v

Page 16: Ruby In Wheezy

ユーザ毎に変えるには?

rbenv を使いましょう.

% rbenv init# Load rbenv automatically by adding# the following to ~/.bash_profile:

eval "$(rbenv init -)"% rbenv versions% rbenv alternatives% rbenv versions% rbenv global 1.9.3-debian

Page 17: Ruby In Wheezy

Debian パッケージになっていないRuby を使うには?

ruby-build を使うことが可能です.

While ruby-build is a great tool to build Ruby versions that are notavailable via APT, you should still use the Debian-packaged versionsof Ruby whenever possible since they are tested and supported by theDebian community.

Please do not report bugs you encounter while using your homebuiltRubies to the Debian team; Rubies built by yourself are not supported.

Page 18: Ruby In Wheezy

ruby-build で ruby2.0rc2 を使うには?: (1)

rbenv + ruby-build がオススメ

ruby-build の definitions には 2.0.0-dev までしかない

2.0.0rc2 の definitions を書いて build すれば良くね?

/usr/share/ruby-build/2.0.0-dev をコピーして修正

% cat 2.0.0rc2install_git "ruby-2.0.0rc" "https://github.com/ruby/ruby.git" "v2_0_0_rc2" autoconf standard

Page 19: Ruby In Wheezy

ruby-build で ruby2.0rc2 を使うには?: (2)

必要なパッケージを install

% sudo apt-get build-dep ruby1.9.1-dev ...

rbenv 管理下に install

% ruby-build --verbose 2.0.0rc2 `echo $HOME`/.rbenv/versions/2.0.0rc2...

Page 20: Ruby In Wheezy

ruby-build で ruby2.0rc2 を使うには?: (3)

rbenv で環境変数を読み込み

% rbenv global 2.0.0rc2% ruby -vruby 2.0.0dev (2013-02-08 trunk 39159) [x86_64-linux]

試しにイロイロ動かしてみましょう

Page 21: Ruby In Wheezy

ruby-build: 注意

再掲します:

While ruby-build is a great tool to build Ruby versions that are notavailable via APT, you should still use the Debian-packaged versionsof Ruby whenever possible since they are tested and supported by theDebian community.

Please do not report bugs you encounter while using your homebuiltRubies to the Debian team; Rubies built by yourself are not supported.

Page 22: Ruby In Wheezy

Have any questions?

Page 23: Ruby In Wheezy

Agenda

Ruby in Wheezy1.

Switch your Ruby2.

gem2deb3.

Debian with Rails4.

Page 24: Ruby In Wheezy

gem2deb

Page 25: Ruby In Wheezy

Ruby in Debian:Maintainer Team

Ruby 本体: pkg-ruby チーム

MRI, Rubinius...

JRuby は pkg-java チーム

Ruby の(拡張)ライブラリ: pkg-ruby-extreas チーム

Team Documentation and current packaging practices

Page 26: Ruby In Wheezy

Ruby in Debian:Package naming scheme

これまで:

ruby1.8, ruby1.9.1 各々ついて別のパッケージ名

libhogehoge-ruby{,1.8,1.9.1} という名前

これから:

ruby1.8, ruby1.9.1 両方について同じパッケージ名

ruby-hogehoge: hogehoge は gem の名前

Page 27: Ruby In Wheezy

Ruby in Debian: File hierarchy(1)

本体同梱以外のパッケージは vendordir 以下に

pure Ruby: Config::CONFIG['vendordir']

/usr/lib/ruby/vendor_ruby

C 拡張ライブラリ: Config::CONFIG['vendorarchdir']

/usr/lib/ruby/vendor_ruby/1.8/x86_64-linux

/usr/lib/ruby/vendor_ruby/1.9.1/x86_64-linux

Page 28: Ruby In Wheezy

Ruby in Debian: File hierarchy(2)

% irb1.8irb(main):001:0> puts $LOAD_PATH/usr/local/lib/site_ruby/1.8/usr/local/lib/site_ruby/1.8/x86_64-linux/usr/local/lib/site_ruby/usr/lib/ruby/vendor_ruby/1.8/usr/lib/ruby/vendor_ruby/1.8/x86_64-linux/usr/lib/ruby/vendor_ruby/usr/lib/ruby/1.8/usr/lib/ruby/1.8/x86_64-linux.=> nil

Page 29: Ruby In Wheezy

Ruby in Debian: File hierarchy(3)

% irb1.9.1puts $LOAD_PATHirb(main):001:0> puts $LOAD_PATH/usr/local/lib/site_ruby/1.9.1/usr/local/lib/site_ruby/1.9.1/x86_64-linux/usr/local/lib/site_ruby/usr/lib/ruby/vendor_ruby/1.9.1/usr/lib/ruby/vendor_ruby/1.9.1/x86_64-linux/usr/lib/ruby/vendor_ruby/usr/lib/ruby/1.9.1/usr/lib/ruby/1.9.1/x86_64-linux.=> nil

Page 30: Ruby In Wheezy

Ruby in Debian:Maintainer Team

Ruby 本体: pkg-ruby チーム

MRI, Rubinius...

JRuby は pkg-java チーム

Ruby の(拡張)ライブラリ: pkg-ruby-extreas チーム

Team Documentation and current packaging practices

パッケージ作成には gem2deb を使用中

Page 31: Ruby In Wheezy

Ruby in Debian:gem2deb

gem2deb:

gem から deb パッケージを作成するコマンド

% gem fetch hogehoge.gem% gem2deb hogehoge[version].gem% ...% dpkg -i ruby-hogehoge_[version]-1.deb

...と, 常にこうなるなら苦労しねぇんだな, これが.

Page 32: Ruby In Wheezy

gem2deb pit fall(1): dependency hell

多くの gem は「依存漏れ」がある

みつける度に Bug Report 書こう!

chain dependencies

Fxxk !!

Page 33: Ruby In Wheezy

gem2deb pit fall(2): test/spec(1)

Debian パッケージは Ruby1.8, 1.9.3 両方で動く必要有

1.9 のみサポート, というのも可能ですが.

なので, テストが転んで deb ができない, という事が多い

test/spec で PATH が埋め込まれている

相対 PATH が酷い事になっていたり

gem としても作法が良くないですよね?

Page 34: Ruby In Wheezy

gem2deb pit fall(2): test/spec(2)

LOCALE の設定がアレ

Debian のパッケージビルド環境は LOCALE が設定されていない

test/spec の Encoding.default_external が...

最近 gem2deb は Encoding.default_external = "UTF-8" になった.

Bundler で古いライブラリに pin 止めされていたり

Page 35: Ruby In Wheezy

実演?

Page 36: Ruby In Wheezy

Have any questions?

Page 37: Ruby In Wheezy

Agenda

Ruby in Wheezy1.

Switch your Ruby2.

gem2deb3.

Debian with Rails4.

Page 38: Ruby In Wheezy

Debian with Rails

Page 39: Ruby In Wheezy

Rails Application in Debian

Debian パッケージとして提供している Rails アプリ

今の所 Redmine のみ

しかも Redmine 1.4.4

Redmine 2.x は experimental

Redmine 1.4.4 は Rails2

なので Debian パッケージには Rails2 と Rails3 が存在

Page 40: Ruby In Wheezy

Rails in Debian

Rails2, Rails3 in Debian

% apt-show-versions -p railsNot installedrails 2:2.3.14.2 sid ftp.jp.debian.org% apt-show-versions -p rails3Not installedrails3 3.2.6-1 sid ftp.jp.debian.org

Page 41: Ruby In Wheezy

Rails in Debian

パッケージとしての共存は不可能

ActiveRecord, ActiveSupport の 2 系と 3 系を共存?

require に version 番号付けるだけで良い?

そもそも需要あるの?

chroot + reverse proxy ?

Page 42: Ruby In Wheezy

Have any

Ideas?

Page 43: Ruby In Wheezy

Have any questions?

Page 44: Ruby In Wheezy

References.

Lucas Nussbaum's Blog: * Changes to Ruby in Debian (and Ubuntu) http://www.lucas-nussbaum.net/blog/?p=681

DebianWiki: * TeamsRuby: http://wiki.debian.org/Teams/Ruby * Debian/Ruby Wheezy Transition: http://pkg-ruby-extras.alioth.debian.org/wheezy/