clock-up-blog

junk-junction

(Windows) Ruby2.0 on Rails で SQLite3 にハマらない手順

概要

railsが使いたい。
ruby2.0が使いたい。
RailsInstaller に Ruby2.0.0対応版(アルファ版)がある!これを導入しよう。

しかし sqlite3 の罠があった。

(おそらく)ハマらない手順まとめ

railsinstaller-3.0.0.exe デフォルト選択肢でインストール (C:\RailsInstaller)。
sqlite-autoconf-3071502.tar.gz を解凍して C:\sqlite-autoconf-3071502 として設置。

[RailsInstaller] - [Command Prompt with Ruby and Rails] にて

> set PATH=C:\RailsInstaller\DevKit\mingw\bin;%PATH%
> bash
$ cd c:/sqlite-autoconf-3071502
$ ./configure --prefix=c:/sqlite3
$ make
$ mkdir c:/sqlite3
$ make install
$ cp c:/RailsInstaller/Ruby2.0.0/bin/sqlite3.exe c:/RailsInstaller/Ruby2.0.0/bin/sqlite3.exe.bk
$ cp c:/sqlite3/bin/* c:/RailsInstaller/Ruby2.0.0/bin/.
$ exit
> gem uninstall sqlite3
> gem install sqlite3 --platform=ruby -- --with-sqlite3-include=c:/sqlite3/include --with-sqlite3-lib=c:/sqlite3/lib
…
1 gem installed

とりあえず以上の手順で sqlite3 モジュールインストール完了。

適当なプロジェクトで確認。
[RailsInstaller] - [Command Prompt with Ruby and Rails] にて

> rails new HogeProject
> gem uninstall sqlite3
Select gem to uninstall:
 1. sqlite3-1.3.7-x86-mingw32
 2. sqlite3-1.3.7
 3. All versions
> 1
Successfully uninstalled sqlite3-1.3.7-x86-mingw32
> cd HogeProject
> rails g scaffold Content name:string body:text
> rake db:migrate
> rails s

サーバが起動されました。
ブラウザで http://localhost:3000/ を開き、[About your application's environment] をクリックして
各モジュールのバージョンを確認しましょう。

rails new が mingw32 系の sqlite3 をインストールしてしまうので、手動でアンインストールしているのがミソです。
もっとスマートな方法があれば誰か教えてください。


以下は詳細な道のり。(上記手順で解決しているなら特に読まなくても良い)

手順詳細

RailsInstaller による Ruby on Rails インストール

railsinstaller-windows 3.0.0-alpha1 with Ruby 2.0.0 を入手する。
railsinstaller.org
└→ RubyForge: Rails Installer: ファイルリスト
   └→ railsinstaller-3.0.0.exe

railsinstaller-3.0.0.exe を実行し、ぜんぶデフォルトで進んでいけばOK。
C:\RailsInstaller にインストールされます。

インストール後にプロンプトで以下のようなことを聞かれる場合は
github 等で使う名前とメールアドレスを入力しましょう。

…
 Please enter your name, for example mine is: Wayne E. Seguin
name > (名前を入力)

…
 Please enter your email address, for example mine is: wayneeseguin@gmail.com
email > (メールアドレスを入力)

適当なプロジェクトを準備してみる

プロジェクト作って、ひとつモデルを作ってみる。

[RailsInstaller] - [Command Prompt with Ruby and Rails] にて

> rails new HogeProject
> cd HogeProject
> rails g scaffold Content name:string body:text
C:/RailsInstaller/Ruby2.0.0/lib/ruby/gems/2.0.0/gems/sqlite3-1.3.7-x86-mingw32/lib/sqlite3.rb:6:in `require': cannot load such file -- sqlite3/sqlite3_native (LoadError)
        from C:/RailsInstaller/Ruby2.0.0/lib/ruby/gems/2.0.0/gems/sqlite3-1.3.7-x86-mingw32/lib/sqlite3.rb:6:in `rescue in <top (required)>'
…

gem の sqlite3 の処理でコケます。

普通に gem sqlite3 モジュールを入れ直してみる

[RailsInstaller] - [Command Prompt with Ruby and Rails] にて

> gem uninstall sqlite3
Temporarily enhancing PATH to include DevKit...
Building native extensions.  This could take a while...
ERROR:  Error installing sqlite3:
        ERROR: Failed to build gem native extension.

    C:/RailsInstaller/Ruby2.0.0/bin/ruby.exe extconf.rb
checking for sqlite3.h... no
sqlite3.h is missing. Install SQLite3 from http://www.sqlite.org/ first.
*** extconf.rb failed ***
Could not create Makefile due to some reason, probably lack of necessary libraries and/or headers.  Check the mkmf.log file for more details.  You may need configuration options.
…

ダメですね。

sqlite3 の差し替え

sqlite3 のファイル一式を入手する
SQLite Home Page
└→ SQLite Download Page
   └→ sqlite-autoconf-3071502.tar.gz

解凍して、C:\sqlite-autoconf-3071502 として設置する。

[RailsInstaller] - [Command Prompt with Ruby and Rails] にて

> set PATH=C:\RailsInstaller\DevKit\mingw\bin;%PATH%
> bash
$ cd c:/sqlite-autoconf-3071502
$ ./configure --prefix=c:/sqlite3
$ make
$ mkdir c:/sqlite3
$ make install
$ cp c:/RailsInstaller/Ruby2.0.0/bin/sqlite3.exe c:/RailsInstaller/Ruby2.0.0/bin/sqlite3.exe.bk
$ cp c:/sqlite3/bin/* c:/RailsInstaller/Ruby2.0.0/bin/.
$ exit
> gem uninstall sqlite3
> gem install sqlite3 --platform=ruby -- --with-sqlite3-include=c:/sqlite3/include --with-sqlite3-lib=c:/sqlite3/lib
…
1 gem installed

成功!

プロジェクトの準備ふたたび

再度モデル作成を試します。

[RailsInstaller] - [Command Prompt with Ruby and Rails] にて

> cd HogeProject
> rails g scaffold Content name:string body:text
      invoke  active_record
      create    db/migrate/20130710053516_create_contents.rb
      create    app/models/content.rb
      …
      invoke  scss
      create    app/assets/stylesheets/scaffolds.css.scss
> rake db:migrate
==  CreateContents: migrating =================================================
-- create_table(:contents)
   -> 0.0020s
==  CreateContents: migrated (0.0040s) ========================================

できた!

もし、以下のようなエラーが出るようなら、

> rails g scaffold Content name:string body:text
C:/RailsInstaller/Ruby2.0.0/lib/ruby/gems/2.0.0/gems/sqlite3-1.3.7-x86-mingw32/lib/sqlite3.rb:6:in `require': cannot load such file -- sqlite3/sqlite3_native (LoadError)
        from C:/RailsInstaller/Ruby2.0.0/lib/ruby/gems/2.0.0/gems/sqlite3-1.3.7-x86-mingw32/lib/sqlite3.rb:6:in `rescue in <top (required)>'
…


余計な sqlite3-1.3.7-x86-mingw32 を消しましょう。

> gem uninstall sqlite3

Select gem to uninstall:
 1. sqlite3-1.3.7-x86-mingw32
 2. sqlite3-1.3.7
 3. All versions
> 1
Successfully uninstalled sqlite3-1.3.7-x86-mingw32

プロジェクトの実行

[RailsInstaller] - [Command Prompt with Ruby and Rails] にて

> cd HogeProject
> rails s
=> Booting WEBrick
=> Rails 3.2.12 application starting in development on http://0.0.0.0:3000
=> Call with -d to detach
=> Ctrl-C to shutdown server
[2013-07-10 05:42:22] INFO  WEBrick 1.3.1
[2013-07-10 05:42:22] INFO  ruby 2.0.0 (2013-02-24) [i386-mingw32]
[2013-07-10 05:42:22] INFO  WEBrick::HTTPServer#start: pid=1628 port=3000
…

確認

http://localhost:3000/ で、[About your application's environment] をクリックすれば
各モジュールのバージョンが分かります。

f:id:kobake:20130710144727p:plain

Ruby 2.0.0 で実行できた!

謝辞

@yuumi3のお仕事日記
すごく参考になりました!