こっちの記事のほうが新しいです(2015/2/1)

2014年1月7日にリリースされた Linux Mint 16 “Petra” Xfce 版を VirtualBox 上にインストールして Rails の勉強環境を構築する作業メモです.
Ruby on Rails チュートリアル:実例を使って Rails を学ぼう に沿った環境を構築します.
作業メモなので内容は冗長です.

[追記]
結局, 事前に以下のコマンドを実行しておけばいくつかのエラーから免れられる:

sudo apt-get install g++ git zlib1g-dev libxslt-dev libxml2-dev libsqlite3-dev libssl-dev libmysqlclient-dev libreadline-dev

[追記:おわり]

Linux Mint 16 “Petra” Xfce 版のインストール

VirtualBox を起動して仮想マシンの作成をします.
ここから Xfce の 64-bit をダウンロードします.
落とした linuxmint-16-xfce-dvd-64bit.iso で作成した仮想マシンに Linux Mint をインストールします.

ここを参考に日本語化します.

ソフトウェアの管理から ibus-mozc と mozc-utils-gui をインストールします.
設定の言語サポートを開くとなにやら必要なものをインストールしましょうと言われるので言うとおりにします.
いったんログアウトしてログインします. 右下のキーボードのアイコンからモードを Mozc にしておきます.

ユーザーズガイドを流し読みしておきます.

ソフトウェアの管理から emacs, chromium などほしいソフトを入れておきます.
あと git を sudo apt-get install git でインストールします. git version 1.8.3.2 がインストールされました.

Ruby のインストール

rbenv をインストールします.
これは複数の Ruby バージョンを共存させることができる便利なものです.

rbenv を公式の方法に沿ってインストールします.

$ git clone https://github.com/sstephenson/rbenv.git ~/.rbenv
$ echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bashrc
$ echo 'eval "$(rbenv init -)"' >> ~/.bashrc

PATH を変えたのでシェルを再起動します.

ここの説明にしたがって ruby-build をインストールします. これは異なるバージョンの Ruby を管理するためのコマンド rbenv install を利用するための rbenv のプラグインです.

git clone https://github.com/sstephenson/ruby-build.git ~/.rbenv/plugins/ruby-build

これで rbenv install -l と打つとインストール可能な Ruby のバージョンの一覧がずらーっと表示されます.

今回は 1.9.3 の最終安定版をインストールしたいと思います.

rbenv install 1.9.3-p484

しかしエラーで失敗しました

$ rbenv install 1.9.3-p484
Downloading yaml-0.1.5.tar.gz...
-> http://dqw8nmjcqpjn7.cloudfront.net/24f6093c1e840ca5df2eb09291a1dbf1
Installing yaml-0.1.5...

BUILD FAILED

Inspect or clean up the working tree at /tmp/ruby-build.20140211120153.3528
Results logged to /tmp/ruby-build.20140211120153.3528.log

Last 10 log lines:
checking for a BSD-compatible install... /usr/bin/install -c
checking whether build environment is sane... yes
checking for a thread-safe mkdir -p... /bin/mkdir -p
checking for gawk... gawk
checking whether make sets $(MAKE)... yes
checking for gcc... /usr/bin/gcc
checking whether the C compiler works... no
configure: error: in `/tmp/ruby-build.20140211120153.3528/yaml-0.1.5':
configure: error: C compiler cannot create executables
See `config.log' for more details

BUILD FAILED

Inspect or clean up the working tree at /tmp/ruby-build.20140211120153.3528
Results logged to /tmp/ruby-build.20140211120153.3528.log

Last 10 log lines:
checking for a BSD-compatible install... /usr/bin/install -c
checking whether build environment is sane... yes
checking for a thread-safe mkdir -p... /bin/mkdir -p
checking for gawk... gawk
checking whether make sets $(MAKE)... yes
checking for gcc... /usr/bin/gcc
checking whether the C compiler works... no
configure: error: in `/tmp/ruby-build.20140211120153.3528/yaml-0.1.5':
configure: error: C compiler cannot create executables
See `config.log' for more details

checking whether the C compiler works... no と出ているので gcc というものがおかしくなってるとおもいましたが, gcc -v とするとちゃんとバージョン情報が出ました.
試しに以下のような ~/test.c というファイル:

#include <stdio.h>

main()
{
  printf("hello!\n");
  return 0;
}

を作成して gcc ~/test.c すると,

$ gcc test.c
test.c:1:19: fatal error: stdio.h: そのようなファイルやディレクトリはありません
 #include <stdio.h>
                   ^
compilation terminated.

となりコンパイルが通りません. そこで g++ を sudo apt-get install g++ によりインストールします. インストール後, gcc ~/test.c とすると無事に実行ファイル ./a.out が作成されました. 一応 ~/a.out として実行すると hello! が表示されました.

g++ をインストールしたのでもう一度 rbenv install 1.9.3-p484 をするとうまくいきました.
以下のコマンドで rbenv でインストールしたものを確認してみます:

$ rbenv versions
  1.9.3-p484

使う Ruby のバージョンを指定します:

$ rbenv global 1.9.3-p484

もう一度バージョン確認すると, 使用中のバージョン名の左に * がつきます:

$ rbenv versions
* 1.9.3-p484 (set by /home/おこ/.rbenv/version)

最後に設定の反映を完了させる?ために rbenv rehash を実行します.

Ruby のバージョン確認をしておきます:

$ ruby -v
ruby 1.9.3p484 (2013-11-22 revision 43786) [x86_64-linux]

これで Ruby はもうインストールされましたが, Ruby のバージョンごとに使う gem をまとめるてくれる gemset を使えるようにします. rbenv の gemset 管理用のプラグイン rbenv-gemset を 公式 を参考にインストールします. ~/.rbenv/plugins フォルダはすでにあるので以下のようにします:

$ cd ~/.rbenv/plugins
$ git clone git://github.com/jf/rbenv-gemset.git

ruby 1.9.3-p484 用の gemset を gemset-1.9.3 という名前で作成します:

$ rbenv gemset create 1.9.3-p484 gemset-1.9.3
created gemset-1.9.3 for 1.9.3-p484

作成した gemset の一覧を表示してみます:

$ rbenv gemset list
1.9.3-p484:
  gemset-1.9.3

gem のバージョンを確認します:

$ gem -v
1.8.23

バージョンを 1.8.24 にアップデートします:

$ gem update --system 1.8.24
ERROR:  Loading command: update (LoadError)
    cannot load such file -- zlib
ERROR:  While executing gem ... (NameError)
    uninitialized constant Gem::Commands::UpdateCommand

エラーが発生しました. sudo apt-get install zlib1g-dev で zlib をインストールし, 1.9.3-p484 を再インストールしました. rbenv rehash もしておきます.
他にも一緒にインストールしておいたほうがいいものがあるぽいですが, とりあえず今は関係ないので zlib1g-dev のみにしておきます. (参考: Ubuntu に ruby をインストールして zlib がないと文句を言われる - Forever Undecided)

rbenv uninstall 1.9.3-p484
rbenv install 1.9.3-p484

もう一度 gem update --system 1.8.24 すると,

$ gem update --system 1.8.24
Updating rubygems-update
Fetching: rubygems-update-1.8.24.gem (100%)
Successfully installed rubygems-update-1.8.24
Installing RubyGems 1.8.24
RubyGems 1.8.24 installed

== 1.8.24 / 2012-04-27

* 1 bug fix:

  * Install the .pem files properly. Fixes #320
  * Remove OpenSSL dependency from the http code path


------------------------------------------------------------------------------

RubyGems installed the following executables:
	/home/おこ/.rbenv/versions/1.9.3-p484/bin/gem

RubyGems system software updated

アップデート出来ましたがなにか 1 bug fix: という不穏なメッセージが出ました. しかしとりあえずこれでよしとします.

念の為 gem のバージョンを確認すると,

$ gem -v
1.8.24

確かに 1.8.24 になってます.

gem がドキュメントを作成しないようにするために以下のような記述をした ~/.gemrc を作成します:

install: --no-rdoc --no-ri
update: --no-rdoc --no-ri

Ruby on Rails のインストール

Ruby on Rails のバージョン 3.2.14 をインストールします:

gem install rails -v 3.2.14

バージョン確認をします:

$ rbenv exec rails -v
Rails 3.2.14

bundler など 28 個の gem が一緒にインストールされました.

この時点でインストールされた gem の一覧を表示してみます:

$ rbenv exec gem list

*** LOCAL GEMS ***

actionmailer (3.2.14)
actionpack (3.2.14)
activemodel (3.2.14)
activerecord (3.2.14)
activeresource (3.2.14)
activesupport (3.2.14)
arel (3.0.3)
bigdecimal (1.1.0)
builder (3.0.4)
bundler (1.5.3)
erubis (2.7.0)
hike (1.2.3)
i18n (0.6.9)
io-console (0.3)
journey (1.0.4)
json (1.5.5)
mail (2.5.4)
mime-types (1.25.1)
minitest (2.5.1)
multi_json (1.8.4)
polyglot (0.3.3)
rack (1.4.5)
rack-cache (1.2)
rack-ssl (1.3.3)
rack-test (0.6.2)
rails (3.2.14)
railties (3.2.14)
rake (0.9.2.2)
rdoc (3.9.5)
rubygems-update (1.8.24)
sprockets (2.2.2)
thor (0.18.1)
tilt (1.4.1)
treetop (1.4.15)
tzinfo (0.3.38)

最後に チュートリアル 曰く 他にもいくつかのパッケージをインストールする必要が生じる場合があります。 とのことなので以下を実行しておきます:

sudo apt-get install libxslt-dev libxml2-dev libsqlite3-dev

Rails のアプリケーションを作成します:

$ mkdir ~/rails_projects
$ cd ~/rails_projects
$ rbenv exec rails new first_app

するとエラー:

$ rbenv exec rails new first_app
      (略)
      create  vendor/plugins/.gitkeep
         run  bundle install

Could not load OpenSSL.
You must recompile Ruby with OpenSSL support or change the sources in your
Gemfile from 'https' to 'http'. Instructions for compiling with OpenSSL using
RVM are available at rvm.io/packages/openssl.

以下を実行してからもう一度 ruby 1.9.3-p484 を再インストールしたらうまくいきました. libmysqlclient-dev はこのエラーとは関係ないですが一応ついでにインストールしておきました.

sudo apt-get install libssl-dev libmysqlclient-dev

そして rbenv exec rails s でサーバーを起動しようとしたらまたエラー:

$ rbenv exec rails s
/home/おこ/.rbenv/versions/1.9.3-p484/lib/ruby/gems/1.9.1/gems/execjs-2.0.2/lib/execjs/runtimes.rb:51:in `autodetect': Could not find a JavaScript runtime. See https://github.com/sstephenson/execjs for a list of available runtimes. (ExecJS::RuntimeUnavailable)
	from /home/おこ/.rbenv/versions/1.9.3-p484/lib/ruby/gems/1.9.1/gems/execjs-2.0.2/lib/execjs.rb:5:in `<module:ExecJS>'
        (略)

ここ を参考に Gemfile を修正します:

# gem 'therubyracer', :platforms => :ruby
gem 'therubyracer', :platforms => :ruby

therubyracer をインストールするための記述のコメントアウトを外しました.
もう一度 rbenv exec rails s でサーバーを起動しようとするとうまくいきました.

チュートリアルで躓いたところのメモ

Heroku への push 時にエラー

Heroku への push 時にエラーが発生して, push が成功しませんでした:

$ git push heroku master
       (省略)
-----> Ruby app detected
-----> Compiling Ruby/Rails
-----> Using Ruby version: ruby-2.0.0
-----> Installing dependencies using 1.5.2
       (省略)
       Your bundle is complete!
       Gems in the groups development and test were not installed.
       It was installed into ./vendor/bundle
       Bundle completed (31.85s)
       Cleaning up the bundler cache.
-----> Writing config/database.yml to read from DATABASE_URL
-----> Preparing app for Rails asset pipeline
       Running: rake assets:precompile
       DEPRECATION WARNING: You have Rails 2.3-style plugins in vendor/plugins! Support for these plugins will be removed in Rails 4.0. Move them out and bundle them in your Gemfile, or fold them in to your app as lib/myplugin/* and config/initializers/myplugin.rb. See the release notes for more on this: http://weblog.rubyonrails.org/2012/1/4/rails-3-2-0-rc2-has-been-released. (called from <top (required)> at /tmp/build_4516ee67-6b4b-4069-9f83-e56bb1233527/Rakefile:7)
       DEPRECATION WARNING: You have Rails 2.3-style plugins in vendor/plugins! Support for these plugins will be removed in Rails 4.0. Move them out and bundle them in your Gemfile, or fold them in to your app as lib/myplugin/* and config/initializers/myplugin.rb. See the release notes for more on this: http://weblog.rubyonrails.org/2012/1/4/rails-3-2-0-rc2-has-been-released. (called from <top (required)> at /tmp/build_4516ee67-6b4b-4069-9f83-e56bb1233527/Rakefile:7)
       rake aborted!
       could not connect to server: Connection refused
       Is the server running on host "127.0.0.1" and accepting
       TCP/IP connections on port 5432?
       (省略)
       Tasks: TOP => environment
       (See full trace by running task with --trace)
       Connecting to database specified by DATABASE_URL
 !
 !     Precompiling assets failed.
 !

 !     Push rejected, failed to compile Ruby app

To git@heroku.com:mighty-fortress-2361.git
 ! [remote rejected] master -> master (pre-receive hook declined)
error: failed to push some refs to 'git@heroku.com:mighty-fortress-2361.git'

DEPRECATION WARNING はたぶんただの警告ぽいのでいいとして, 問題の部分は rake aborted!以下:

       rake aborted!
       could not connect to server: Connection refused
       Is the server running on host "127.0.0.1" and accepting
       TCP/IP connections on port 5432?
       (省略)
       Tasks: TOP => environment
       (See full trace by running task with --trace)
       Connecting to database specified by DATABASE_URL
 !
 !     Precompiling assets failed.
 !

 !     Push rejected, failed to compile Ruby app

To git@heroku.com:mighty-fortress-2361.git
 ! [remote rejected] master -> master (pre-receive hook declined)
error: failed to push some refs to 'git@heroku.com:mighty-fortress-2361.git'

だと思われます. あと上の方の Using Ruby version: ruby-2.0.0 という部分も 1.9.3 使ってるのに変だなあと思いました.
とりあえず Heroku への push は config/application.rb に以下を追加することで解決しました:

config.assets.initialize_on_precompile = false

公式にちゃんとトラブルシューティングが書かれてました:
Rails Asset Pipeline on Heroku Cedar | Heroku Dev Center
(再度 push する際は変更点の commit をしておきます)

うまくいきましたが以下のような Warning が出ました:

       (省略)
       Compiled jquery.js  (4ms)  (pid 1133)
       Compiled jquery_ujs.js  (0ms)  (pid 1133)
       Compiled application.js  (40ms)  (pid 1133)
       Compiled application.css  (0ms)  (pid 1133)
       Asset precompilation completed (8.00s)
-----> WARNINGS:
       Injecting plugin 'rails_log_stdout'
       Injecting plugin 'rails3_serve_static_assets'
       Add 'rails_12factor' gem to your Gemfile to skip plugin injection
       You have not declared a Ruby version in your Gemfile.
       To set your Ruby version add this line to your Gemfile:
       ruby '2.0.0'
       # See https://devcenter.heroku.com/articles/ruby-versions for more information.
-----> Discovering process types
       Procfile declares types -> (none)
       Default types for Ruby  -> console, rake, web, worker

-----> Compressing... done, 30.3MB
-----> Launching... done, v5
       http://mighty-fortress-2361.herokuapp.com deployed to Heroku

To git@heroku.com:mighty-fortress-2361.git
 * [new branch]      master -> master

・rails_12factor を Gemfile に追加してください.
・Ruby のバージョン明示するために Gemfile に ruby '2.0.0' を記述してください.

と言われてます.
でもとりあえず Heroku 上で見られるようになったのでよしとします.

rails c でエラー発生

$ rbenv exec rails console
/home/issei/.rbenv/versions/1.9.3-p484/lib/ruby/1.9.1/irb/completion.rb:9:in `require': cannot load such file -- readline (LoadError)
	from /home/issei/.rbenv/versions/1.9.3-p484/lib/ruby/1.9.1/irb/completion.rb:9:in `<top (required)>'
	from /home/issei/.rbenv/versions/1.9.3-p484/lib/ruby/gems/1.9.1/gems/railties-3.2.14/lib/rails/commands/console.rb:3:in `require'
	from /home/issei/.rbenv/versions/1.9.3-p484/lib/ruby/gems/1.9.1/gems/railties-3.2.14/lib/rails/commands/console.rb:3:in `<top (required)>'
	from /home/issei/.rbenv/versions/1.9.3-p484/lib/ruby/gems/1.9.1/gems/railties-3.2.14/lib/rails/commands.rb:38:in `require'
	from /home/issei/.rbenv/versions/1.9.3-p484/lib/ruby/gems/1.9.1/gems/railties-3.2.14/lib/rails/commands.rb:38:in `<top (required)>'
	from script/rails:6:in `require'
	from script/rails:6:in `<main>'

以下を実行してから 1.9.3-p484 を rbenv で再インストール.

sudo apt-get install libreadline-dev