古いRails環境を再起動するまで
古いRails環境というのは、具体的にはRails1.1.6である。実はこのブログの始まりは、Railsの学習の記録であった。むかしむかし、このブログ創世の頃、Railsはバージョン1.1.6がメジャーであった。そのため、自分のMacBookの中には、Rails1.1.6の実験プロジェクトがたくさんある。
しかし、現在のRailsはバージョン4.1.7まで進んでしまった。過去のプロジェクトをちょっと動かして試してみたい衝動に駆られても、エラー出まくり。まったく動かない...。このまま永遠に起動しないRailsプロジェクトが残り続けるのも悲しいので、昔の環境を整えて、過去の遺産を再起動してみようと思い立った。以下は、MacBook Pro Retina15 OSX 10.9.5の環境で、Rails1.1.6を起動するまでの記録。
HomebrewとCommand Line Toolsを使う
- rbenvをインストールするために、Homebrewを使った。
- 自分のMacBook環境に既にインストール済みだったので。
- Homebrewのインストール
$ ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
- Command Line Toolsのインストール
- Homebrewがビルドする時に必要になるので。
$ xcode-select --install
-
- 入れないで使いだすと、入れてねって言われる。
Warning: No developer tools installed. You should install the Command Line Tools. Run `xcode-select --install` to install them.
rbenv環境をインストール
- rbenvは、複数のRuby環境を素早く切り替えて使い分けるツール。
- rbenvを快適に使うためには、以下二つのgemも入れた方が良さそう。
- rbenv-default-gems(新規ruby環境インストール時に、default-gemsに設定したgemもインストールしてくれる)
- rbenv-gem-rehash(ruby環境切替時に必要なrbenv rehashコマンドを良きに計らい実行してくれる)
- どちらもrbenvと同じ作者の方が開発しているツールのようだ。
- 依存関係によって、以下のコマンドで必要なrbenv環境がインストールされる。
$ brew install rbenv-default-gems rbenv-gem-rehash 🍺 /usr/local/Cellar/rbenv/0.4.0: 31 files, 152K, built in 2 seconds 🍺 /usr/local/Cellar/ruby-build/20141016: 129 files, 552K, built in 2 seconds 🍺 /usr/local/Cellar/rbenv-default-gems/1.0.0: 4 files, 16K, built in 2 seconds 🍺 /usr/local/Cellar/rbenv-gem-rehash/1.0.0: 7 files, 24K, built in 2 seconds
rbenv、ruby-build、rbenv-default-gems、rbenv-gem-rehashがインストールされた!
rbenvを使う準備
- そのターミナル環境でrbenvを使うためには、最初に必ずeval "$(rbenv init -)"しておく必要がある。
$ eval "$(rbenv init -)"
- また上記コマンドは、ターミナルでタブやウィンドウを開く度に毎回必要になるので、使っているシェル環境の設定ファイルに追記しておくのだ。
$ echo 'eval "$(rbenv init -)"' >> ~/.bashrc
$ rbenv versions
* system (set by /Users/zari/.rbenv/version)
Ruby-1.8.7をインストール
- rbenvでインストール可能なRubyのバージョンを調べる。
$ rbenv install -l
Available versions:
1.8.6-p383
1.8.6-p420
1.8.7-p249
1.8.7-p302
1.8.7-p334
1.8.7-p352
1.8.7-p357
1.8.7-p358
1.8.7-p370
1.8.7-p371
1.8.7-p374
1.8.7-p375
1.9.1-p378
1.9.1-p430
1.9.2-p0
...中略...
- ズラッとリスト表示されて迷う。
- Rails1.1.6当時のRubyは1.8世代。
- よって1.8系の最終パッチの1.8.7-p375に決めた。
- しかし、インストールするとエラーが発生...。
$ rbenv install 1.8.7-p375 Configured with: --prefix=/Applications/Xcode.app/Contents/Developer/usr --with-gxx-include-dir=/usr/include/c++/4.2.1 ERROR: This package must be compiled with GCC, but ruby-build couldn't find a suitable `gcc` executable on your system. Please install GCC and try again. DETAILS: Apple no longer includes the official GCC compiler with Xcode as of version 4.2. Instead, the `gcc` executable is a symlink to `llvm-gcc`, a modified version of GCC which outputs LLVM bytecode. For most programs the `llvm-gcc` compiler works fine. However, versions of Ruby older than 1.9.3-p125 are incompatible with `llvm-gcc`. To build older versions of Ruby you must have the official GCC compiler installed on your system. TO FIX THE PROBLEM: Install Homebrew's apple-gcc42 package with this command: brew tap homebrew/dupes ; brew install apple-gcc42 You will need to install the official GCC compiler to build older versions of Ruby even if you have installed Apple's Command Line Tools for Xcode package. The Command Line Tools for Xcode package only includes `llvm-gcc`. BUILD FAILED (OS X 10.9.5 using ruby-build 20141016)
- エラーメッセージを真剣に読むと...
- どうやら、以下のコマンドでHomebrewでgccをインストールするようだ。
$ brew tap homebrew/dupes ; brew install apple-gcc42 🍺 /usr/local/Cellar/apple-gcc42/4.2.1-5666.3: 104 files, 75M, built in 2 seconds
gcc-4.2、インストール完了!
- 気を取り直して、もう一度Ruby-1.8.7-p375をインストール。
$ rbenv install 1.8.7-p375 Configured with: --prefix=/Applications/Xcode.app/Contents/Developer/usr --with-gxx-include-dir=/usr/include/c++/4.2.1 Checking out http://svn.ruby-lang.org/repos/ruby/branches/ruby_1_8_7... Installing ruby-1.8.7-p375... Installed ruby-1.8.7-p375 to /Users/zari/.rbenv/versions/1.8.7-p375 Downloading rubygems-1.6.2.tgz...
- > http://dqw8nmjcqpjn7.cloudfront.net/cb5261818b931b5ea2cb54bc1d583c47823543fcf9682f0d6298849091c1cea7
Ruby環境の切替
$ rbenv versions * system (set by /Users/zari/.rbenv/version) 1.8.7-p375 $ rbenv global 1.8.7-p375 $ rbenv versions system * 1.8.7-p375 (set by /Users/zari/.rbenv/version)
- rubyバージョンとgemのインストール先が、ちゃんと変更されていることを確認する。
$ ruby -v ruby 1.8.7 (2013-12-22 patchlevel 375) [i686-darwin13.4.0] $ gem env home /Users/zari/.rbenv/versions/1.8.7-p375/lib/ruby/gems/1.8
- もし、上記のように変更されていなかったら、rbenv rehashコマンドを実行してみる。
- 本来は、rbenv-gem-rehashが良きに計らい自動で実行してくれるはず。
- rbenvインストール後の初回の切替のみ、rbenv rehashの実行が必要になるかもしれない。
railsをインストール
- Railsのバージョンを確認してみる。
$ gem search ^rails$ -ra *** REMOTE GEMS *** rails (4.1.7, 4.1.6, 4.1.5, 4.1.4, 4.1.3, 4.1.2, 4.1.1, 4.1.0, 4.0.11, 4.0.10, 4.0.9, 4.0.8, 4.0.7, 4.0.6, 4.0.5, 4.0.4, 4.0.3, 4.0.2, 4.0.1, 4.0.0, 3.2.20, 3.2.19, 3.2.18, 3.2.17, 3.2.16, 3.2.15, 3.2.14, 3.2.13, 3.2.12, 3.2.11, 3.2.10, 3.2.9, 3.2.8, 3.2.7, 3.2.6, 3.2.5, 3.2.4, 3.2.3, 3.2.2, 3.2.1, 3.2.0, 3.1.12, 3.1.11, 3.1.10, 3.1.9, 3.1.8, 3.1.7, 3.1.6, 3.1.5, 3.1.4, 3.1.3, 3.1.2, 3.1.1, 3.1.0, 3.0.20, 3.0.19, 3.0.18, 3.0.17, 3.0.16, 3.0.15, 3.0.14, 3.0.13, 3.0.12, 3.0.11, 3.0.10, 3.0.9, 3.0.8, 3.0.7, 3.0.6, 3.0.5, 3.0.4, 3.0.3, 3.0.2, 3.0.1, 3.0.0, 2.3.18, 2.3.17, 2.3.16, 2.3.15, 2.3.14, 2.3.12, 2.3.11, 2.3.10, 2.3.9, 2.3.8, 2.3.7, 2.3.6, 2.3.5, 2.3.4, 2.3.3, 2.3.2, 2.2.3, 2.2.2, 2.1.2, 2.1.1, 2.1.0, 2.0.5, 2.0.4, 2.0.2, 2.0.1, 2.0.0, 1.2.6, 1.2.5, 1.2.4, 1.2.3, 1.2.2, 1.2.1, 1.2.0, 1.1.6, 1.1.5, 1.1.4, 1.1.3, 1.1.2, 1.1.1, 1.1.0, 1.0.0, 0.14.4, 0.14.3, 0.14.2, 0.14.1, 0.13.1, 0.13.0, 0.12.1, 0.12.0, 0.11.1, 0.11.0, 0.10.1, 0.10.0, 0.9.5, 0.9.4.1, 0.9.4, 0.9.3, 0.9.2, 0.9.1, 0.9.0, 0.8.5, 0.8.0)
- ズラッとRailsのバージョンが並んだ。
- 欲しいバージョン1.1.6もちゃんとある。
- Rails-1.1.6をインストール。
$ gem install rails -v 1.1.6 Fetching: rake-10.3.2.gem (100%) Fetching: activesupport-1.3.1.gem (100%) Fetching: activerecord-1.14.4.gem (100%) Fetching: actionpack-1.12.5.gem (100%) Fetching: actionmailer-1.2.5.gem (100%) Fetching: actionwebservice-1.1.6.gem (100%) Fetching: rails-1.1.6.gem (100%) Successfully installed rake-10.3.2 Successfully installed activesupport-1.3.1 Successfully installed activerecord-1.14.4 Successfully installed actionpack-1.12.5 Successfully installed actionmailer-1.2.5 Successfully installed actionwebservice-1.1.6 Successfully installed rails-1.1.6 7 gems installed Installing ri documentation for rake-10.3.2... Installing ri documentation for activesupport-1.3.1... ERROR: While generating documentation for activesupport-1.3.1... MESSAGE: Unhandled special: Special: type=17, text=""
... RDOC args: --ri --op /Users/zari/.rbenv/versions/1.8.7-p375/lib/ruby/gems/1.8/doc/activesupport-1.3.1/ri lib --title activesupport-1.3.1 Documentation --quiet
- インストールできたようだ。
- ドキュメントのインストールでエラーが出ているけど、気にしないことにした。
- データベースはsqlite3を使うつもりなので、それもインストール。
- 正確にはrubyからsqlite3コマンドを利用するgemパッケージなのだ。
$ gem install sqlite3
Fetching: sqlite3-1.3.10.gem (100%)
Building native extensions. This could take a while...
Successfully installed sqlite3-1.3.10
1 gem installed
...中略...
-
- sqlite3コマンド自体はOSXに標準インストールされている。
$ which sqlite3
/usr/bin/sqlite3
懐かしのscaffold
- todoプロジェクトの開始!
$ rails todo create create app/controllers create app/helpers create app/models create app/views/layouts create config/environments create components create db create doc create lib create lib/tasks create log create public/images create public/javascripts create public/stylesheets create script/performance create script/process create test/fixtures create test/functional create test/integration create test/mocks/development create test/mocks/test create test/unit create vendor create vendor/plugins create tmp/sessions create tmp/sockets create tmp/cache create Rakefile create README create app/controllers/application.rb create app/helpers/application_helper.rb create test/test_helper.rb create config/database.yml create config/routes.rb create public/.htaccess create config/boot.rb create config/environment.rb create config/environments/production.rb create config/environments/development.rb create config/environments/test.rb create script/about create script/breakpointer create script/console create script/destroy create script/generate create script/performance/benchmarker create script/performance/profiler create script/process/reaper create script/process/spawner create script/runner create script/server create script/plugin create public/dispatch.rb create public/dispatch.cgi create public/dispatch.fcgi create public/404.html create public/500.html create public/index.html create public/favicon.ico create public/robots.txt create public/images/rails.png create public/javascripts/prototype.js create public/javascripts/effects.js create public/javascripts/dragdrop.js create public/javascripts/controls.js create public/javascripts/application.js create doc/README_FOR_APP create log/server.log create log/production.log create log/development.log create log/test.log $ cd todo $ script/generate model todo ./script/../config/boot.rb:25:Warning: Gem::cache is deprecated and will be removed on or after August 2011. Use Gem::source_index. ./script/../config/boot.rb:25:Warning: Gem::SourceIndex#search support for String patterns is deprecated, use #find_name ./script/../config/boot.rb:28: undefined method `require_gem' for main:Object (NoMethodError) from script/generate:2:in `require' from script/generate:2
- エラーで止まった。
- エラー箇所を確認してみると、require_gemの部分。
- たしかgem1.0以降、require_gemは廃止されている。
- たぶん、そのせい。TextMateで以下のように修正してみた。
$ mate config/boot.rb $ diff -u <(pbpaste) config/boot.rb --- /dev/fd/63 2014-10-30 17:28:00.000000000 +0900 +++ config/boot.rb 2014-10-30 17:27:43.000000000 +0900 @@ -25,7 +25,7 @@ rails_gem = Gem.cache.search('rails', "=#{version}").first if rails_gem - require_gem "rails", "=#{version}" + gem "rails", "=#{version}" require rails_gem.full_gem_path + '/lib/initializer' else STDERR.puts %(Cannot find gem for Rails =#{version}: @@ -35,7 +35,7 @@ exit 1 end else - require_gem "rails" + require "rails" require 'initializer' end end
- 気を取り直して、script/generate model todoからやり直し。
$ script/generate model todo ./script/../config/boot.rb:25:Warning: Gem::cache is deprecated and will be removed on or after August 2011. Use Gem::source_index. ./script/../config/boot.rb:25:Warning: Gem::SourceIndex#search support for String patterns is deprecated, use #find_name /Users/zari/.rbenv/versions/1.8.7-p375/lib/ruby/gems/1.8/gems/rails-1.1.6/lib/rails_generator/lookup.rb:199:Warning: Gem::cache is deprecated and will be removed on or after August 2011. Use Gem::source_index. /Users/zari/.rbenv/versions/1.8.7-p375/lib/ruby/gems/1.8/gems/rails-1.1.6/lib/rails_generator/lookup.rb:199:Warning: Gem::SourceIndex#search support for Regexp patterns is deprecated, use #find_name exists app/models/ exists test/unit/ exists test/fixtures/ create app/models/todo.rb create test/unit/todo_test.rb create test/fixtures/todos.yml create db/migrate create db/migrate/001_create_todos.rb
- 今度は正常に終了した。
- データベースの設定
- TextMateで以下のように修正した。
$ mate config/database.yml $ diff -u <(pbpaste) config/database.yml --- /dev/fd/63 2014-10-30 17:34:05.000000000 +0900 +++ config/database.yml 2014-10-30 17:34:02.000000000 +0900 @@ -11,25 +11,19 @@ # And be sure to use new-style password hashing: # http://dev.mysql.com/doc/refman/5.0/en/old-client.html development: - adapter: mysql - database: todo_development - username: root - password: - host: localhost + adapter: sqlite3 + database: db/development.sqlite3 + timeout: 5000 # Warning: The database defined as 'test' will be erased and # re-generated from your development database when you run 'rake'. # Do not set this db to the same as development or production. test: - adapter: mysql - database: todo_test - username: root - password: - host: localhost + adapter: sqlite3 + database: db/test.sqlite3 + timeout: 5000 production: - adapter: mysql - database: todo_production - username: root - password: - host: localhost + adapter: sqlite3 + database: db/production.sqlite3 + timeout: 5000
$ mate db/migrate/001_create_todos.rb $ diff -u <(pbpaste) db/migrate/001_create_todos.rb --- /dev/fd/63 2014-10-30 17:30:05.000000000 +0900 +++ db/migrate/001_create_todos.rb 2014-10-30 17:29:22.000000000 +0900 @@ -1,7 +1,12 @@ class CreateTodos < ActiveRecord::Migration def self.up create_table :todos do |t| - # t.column :name, :string + t.column :body, :string + t.column :due, :date + t.column :done, :boolean + + t.column :created_at, :datetime + t.column :updated_at, :datetime end end
- マイグレーション実行。
$ rake db:migrate /Users/zari/Desktop/rails116/todo/config/boot.rb:25:Warning: Gem::cache is deprecated and will be removed on or after August 2011. Use Gem::source_index. /Users/zari/Desktop/rails116/todo/config/boot.rb:25:Warning: Gem::SourceIndex#search support for String patterns is deprecated, use #find_name rake aborted! ERROR: 'rake/rdoctask' is obsolete and no longer supported. Use 'rdoc/task' (available in RDoc 2.4.2+) instead. /Users/zari/Desktop/rails116/todo/Rakefile:8 (See full trace by running task with --trace)
- しかし、エラーが出てしまった...。
- 散々悩んだあげく、rakeをインストールし直してみようと削除して気付いた。
- Rails1.1.6には、rakeのバージョンが進み過ぎているのかもしれない!
- というわけで、削除した時に表示された(>=0.7.1)を信じて、再インストール。
$ gem uninstall rake You have requested to uninstall the gem: rake-10.3.2 rails-1.1.6 depends on [rake (>= 0.7.1)] If you remove this gems, one or more dependencies will not be met. Continue with Uninstall? [Yn] Y Remove executables: rake in addition to the gem? [Yn] Y Removing rake Successfully uninstalled rake-10.3.2 $ gem install rake -v 0.7.1 Fetching: rake-0.7.1.gem (100%) Successfully installed rake-0.7.1 1 gem installed Installing ri documentation for rake-0.7.1... Installing RDoc documentation for rake-0.7.1...
- 気を取り直して、rake db:migrateを実行すると、正常に完了した!
$ rake db:migrate
(in /Users/zari/Desktop/rails116/todo)
/Users/zari/Desktop/rails116/todo/config/boot.rb:25:Warning: Gem::cache is deprecated and will be removed on or after August 2011. Use Gem::source_index.
/Users/zari/Desktop/rails116/todo/config/boot.rb:25:Warning: Gem::SourceIndex#search support for String patterns is deprecated, use #find_name
== CreateTodos: migrating =====================================================
-- create_table(:todos)
-> 0.0012s
== CreateTodos: migrated (0.0012s) ============================================
- いよいよ、最後の仕上げscaffoldだ。
$ script/generate scaffold todo ./script/../config/boot.rb:25:Warning: Gem::cache is deprecated and will be removed on or after August 2011. Use Gem::source_index. ./script/../config/boot.rb:25:Warning: Gem::SourceIndex#search support for String patterns is deprecated, use #find_name /Users/zari/.rbenv/versions/1.8.7-p375/lib/ruby/gems/1.8/gems/rails-1.1.6/lib/rails_generator/lookup.rb:199:Warning: Gem::cache is deprecated and will be removed on or after August 2011. Use Gem::source_index. /Users/zari/.rbenv/versions/1.8.7-p375/lib/ruby/gems/1.8/gems/rails-1.1.6/lib/rails_generator/lookup.rb:199:Warning: Gem::SourceIndex#search support for Regexp patterns is deprecated, use #find_name exists app/controllers/ exists app/helpers/ create app/views/todos exists test/functional/ dependency model /Users/zari/.rbenv/versions/1.8.7-p375/lib/ruby/gems/1.8/gems/rails-1.1.6/lib/rails_generator/lookup.rb:199:Warning: Gem::cache is deprecated and will be removed on or after August 2011. Use Gem::source_index. /Users/zari/.rbenv/versions/1.8.7-p375/lib/ruby/gems/1.8/gems/rails-1.1.6/lib/rails_generator/lookup.rb:199:Warning: Gem::SourceIndex#search support for Regexp patterns is deprecated, use #find_name exists app/models/ exists test/unit/ exists test/fixtures/ identical app/models/todo.rb identical test/unit/todo_test.rb identical test/fixtures/todos.yml create app/views/todos/_form.rhtml create app/views/todos/list.rhtml create app/views/todos/show.rhtml create app/views/todos/new.rhtml create app/views/todos/edit.rhtml create app/controllers/todos_controller.rb create test/functional/todos_controller_test.rb create app/helpers/todos_helper.rb create app/views/layouts/todos.rhtml create public/stylesheets/scaffold.css
- 正常にscaffoldされたようだ!
- サーバーを起動してみる。
$ script/server ./script/../config/boot.rb:25:Warning: Gem::cache is deprecated and will be removed on or after August 2011. Use Gem::source_index. ./script/../config/boot.rb:25:Warning: Gem::SourceIndex#search support for String patterns is deprecated, use #find_name => Booting WEBrick... => Rails application started on http://0.0.0.0:3000 => Ctrl-C to shutdown server; call with --help for options [2014-10-31 14:15:02] INFO WEBrick 1.3.1 [2014-10-31 14:15:02] INFO ruby 1.8.7 (2013-12-22) [i686-darwin13.4.0] [2014-10-31 14:15:02] INFO WEBrick::HTTPServer#start: pid=37400 port=3000
- 正常に稼働しているみたい。
ブラウザで動作確認
ちゃんと動いた!
稼働環境は以下のとおり
$ gem list *** LOCAL GEMS *** actionmailer (1.2.5) actionpack (1.12.5) actionwebservice (1.1.6) activerecord (1.14.4) activesupport (1.3.1) rails (1.1.6) rake (0.7.1) sqlite3 (1.3.10)