PCを新調したのでイロイロと環境構築を頑張る。
今回はRubyの環境構築。
OSはWindows10 64bit でUNIX環境をシミュレートするために babun (cugwin) を使ってみる。
(友人には仮想を使えと怒られた)
- babun を入れて
- rbenv を入れて
- Ruby2.3 を入れて
- gem (bundler) を利用する!
chocolatey にあるので簡単
choco install babun
でおしまい。
(gcc やpython2 がデフォルトで入ってて便利!)
素のbabunではダメみたいなのでイロイロとインストールする。
(参考: http://qiita.com/hisomura/items/8a1fb4550af363b34cac)
まず、rbenv 入れるためのgit が足りない
pact install gettext-devel
pact install libsasl2
pact install ca-certificates
(参考: http://dqn.sakusakutto.jp/2013/12/cygwin_rbenv_ruby-build_ruby.html)
実は git だけやれば Ruby のインストールはできるんだけど、gem 使ったときとかに
`require': cannot load such file -- fiddle/inport.rb (LoadError)
みたいな感じのエラーが出た。
なので、次のをまるっとインストールしてしまえば良い(済みのやつもあるけど)
pact install gcc-core gcc-g++ make zlib-devel curl autoconf libiconv libiconv-devel rsync patch unzip openssh openssl-devel libxml2-devel libxslt-devel libffi-devel libgdbm-devel
(参考: http://qiita.com/sak_hrr/items/3a02005b44fdaefd3678)
ホームディレクトリとかで
git clone git://github.com/sstephenson/rbenv.git .rbenv
echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.zshenv
echo 'eval "$(rbenv init -)"' >> ~/.zshenv
exec $SHELL
rbenv --version
で確認
イロイロとバグがあるみたいです。
Ruby2.1系やRuby2.2.2 以下だと utoa
という関数が衝突して怒られる。
以下のサイトを参考にして修正すればうまくいった(2.1.6とかは)
http://d.hatena.ne.jp/takehikom/20150221/1424462400
Ruby2.2.3 とかRuby2.3は
`require': cannot load such file -- win32/resolv (LoadError)
みたいな感じで怒られる。
以下のサイトを参考にしてパッチを当てて修正すればうまくいった。
http://proglab.blog.fc2.com/blog-entry-44.html
手作業でやらなくても簡単にパッチを当てれる(と友人に教えてもらった)。
$ cat > patch_ruby
--- ext/extmk.rb.orig 2016-01-04 19:54:05.042378000 +0900
+++ ext/extmk.rb 2016-01-04 20:36:34.009452300 +0900
@@ -496,8 +496,10 @@
default_exclude_exts =
if $mswin or $mingw
%w'pty syslog'
- else
+ elsif not $cygwin
%w'*win32*'
+ else
+ %w''
end
withes, withouts = [["--with", nil], ["--without", default_exclude_exts]].collect {|w, d|
if !(w = %w[-extensions -ext].collect {|o|arg_config(w+o)}).any?
$ rbenv install --patch 2.3.0 < patch_ruby
ちなみにcygwinでbuildしてるせいで、めちゃくちゃ時間がかかる...
(参考: http://d.hatena.ne.jp/takehikom/20130305/1362426096)
gem install bundler
って感じにインストールできる!
と思ったらまたはまった orz...
$ gem install bundler
Fetching: bundler-1.1.2.gem (100%)
1 [main] ruby 3812 child_info_fork::abort: \.babun\cygwin\bin\cyggcc_s-1.dll: Loaded to different address...
(こんな感じのがずーと続く)
どうやらrebaseの問題らしい。
詳しくは(さっぱり)わからないけど、参考サイトのように入力したらうまくいった。
$ cd
$ find ~ -name '*.so' > ~/rebase_so.lst
でシェルをすべて落とし、エクスプローラーで ash.exe
を検索して実行。
$ cd
$ rebaseall -T rebase_so.lst -v
$ exit
と入力(コピペではだめだった)したら、ついにうまくいった!
Cygwinでext/win32がmakeされない件のパッチですが,SVN trunk の r53868 で対応されてまして,Github だと commit 9bfa5d... がソレです。
GithubはURLを .patch にするとパッチが降ってくるお便利仕様なので,commit 9bfa5d... のパッチ を使って
とかやると幸せになれると思います。