概要
Windows上にRailsサーバを建てようとしてはまった部分のメモ。
同期が困っていたので、手助けのつもりで始めたら、色々と罠に引っ掛かり
結局時間を浪費する羽目に。
WindowsのせいじゃないけどWindowsが嫌いになりました。(パッケージの保守が行き届いていないという点で)
注意点
古い情報では、すんなりインストールできてRailsサーバが稼働する記事が多い。
ところが、最新版ではsqlite3のバージョンアップに伴い、コンパイルに必要なライブラリが変更となっている。
したがって、mingwのコンパイラがビルドに失敗しサーバを建てることができないバグがある。
手順3に回避策を提示する。
環境
- Windows 10 Pro Ver.1803 Build. 17134.523
- Ruby 2.5.3p105
- Rails 5.2.2
- [Appen.] Ubuntu on WSL
- 社内イントラ(プロキシ内)
手順
1. Ruby+DevKitのインストール
最新のインストーラでは、Rubyとgemのコンパイル環境をまとめてインストールできる。
- インストーラの入手
ダウンロード元->https://rubyinstaller.org/downloads/
ここから、自分のOSに合ったRubyInstallerを入手する。
DevKitも付いてくる。(MSYS2という仮想Linux環境)
もちろん、gem(Ruby用パッケージマネージャ)も使えるようになる。 - プロキシの設定(恒久的)
MSYS2のインストールでプロキシ回避が必要になるため、システム環境変数に新規変数として以下の値を書き込む。 - インストール
1 -> Enter, 2->Enter, 3->Enterと順に行う。
もし、プロキシの設定を忘れていてMSYS2のアップデートに失敗した場合:エラー: msys の更新に失敗しました (サーバーの無効な url) エラー: 全てのデータベースの同期に失敗しました MSYS2 system update (optional) failed Installation failed: pacman failed
環境変数を設定してから一度シェルを終了し、下記のコマンドを用いてDevKitインストーラを再起動する。
C:\WINDOWS\system32\cmd.exe /c ""C:\"Rubyのインストールフォルダ"\bin\ridk.cmd" install"
この際、一度変なファイルが生成されてしまいPGP鍵が一致しないエラーが出ることがある。
何度か繰り返しているうちに成功する。
- PATHの確認
新しいPowerShellを開き、環境変数を確認するコマンドを入れる。> $Env:Path.Split(";")
結果に、Rubyのパス(例: C:\Ruby\bin)があればOK。
続いて、実際にPowerShellからRubyが呼べるか確認。ruby -v
バージョンが表示されればOK。
社外持ち出しPCなどでProxy設定を外す場合は、環境変数を外しておく。
2. Railsサーバのインストール
Railsサーバは、gem経由でインストールする。
- (Proxy設定を解除している場合)PowerShellでProxy設定を行う(一時的)
Set-Item -path Env:http_proxy -value http://proxy.hogehoge.com:[port]
- gemコマンドでインストール
gem install rails
- 確認
rails -v
ここで、sqlite3をインストールする記事に出くわすことが多いが、
これもgem経由でインストールしてしまうのでその必要はない。
3. サーバの準備
- (Proxy設定を解除している場合)PowerShellでProxy設定を行う(一時的)
Set-Item -path Env:http_proxy -value http://proxy.hogehoge.com:[port]
- 作業フォルダに移動(例: C:\Programming\Web\Ruby )
cd C:\Programming\Web\Ruby\
Linuxでは、ここにさらにサーバ名を入れたフォルダを作るが、Windows版では自動生成されるので不要
- Railsサーバを作成
rails new sample
sqliteのバグによりbundle installが以下のエラーで停止する
Fetching sqlite3 1.4.0 Installing sqlite3 1.4.0 with native extensions Gem::Ext::BuildError: ERROR: Failed to build gem native extension. current directory: C:/Ruby25-x64/lib/ruby/gems/2.5.0/gems/sqlite3-1.4.0/ext/sqlite3 C:/Ruby25-x64/bin/ruby.exe -I C:/Ruby25-x64/lib/ruby/site_ruby/2.5.0 -r ./siteconf20190208-14676-1es4xw8.rb 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. Provided configuration options: --with-opt-dir --without-opt-dir --with-opt-include --without-opt-include=${opt-dir}/include --with-opt-lib --without-opt-lib=${opt-dir}/lib --with-make-prog --without-make-prog --srcdir=. --curdir --ruby=C:/Ruby25-x64/bin/$(RUBY_BASE_NAME) --with-sqlcipher --without-sqlcipher --with-sqlite3-config --without-sqlite3-config --with-pkg-config --without-pkg-config --with-sqlcipher --without-sqlcipher --with-sqlite3-dir --without-sqlite3-dir --with-sqlite3-include --without-sqlite3-include=${sqlite3-dir}/include --with-sqlite3-lib --without-sqlite3-lib=${sqlite3-dir}/lib To see why this extension failed to compile, please check the mkmf.log which can be found here: C:/Ruby25-x64/lib/ruby/gems/2.5.0/extensions/x64-mingw32/2.5.0/sqlite3-1.4.0/mkmf.log extconf failed, exit code 1 Gem files will remain installed in C:/Ruby25-x64/lib/ruby/gems/2.5.0/gems/sqlite3-1.4.0 for inspection. Results logged to C:/Ruby25-x64/lib/ruby/gems/2.5.0/extensions/x64-mingw32/2.5.0/sqlite3-1.4.0/gem_make.out An error occurred while installing sqlite3 (1.4.0), and Bundler cannot continue. Make sure that `gem install sqlite3 -v '1.4.0' --source 'https://rubygems.org/'` succeeds before bundling. In Gemfile: sqlite3
多分、sqlite3 Ver.1.4.0ではインポートするライブラリが変更になったか最新バージョンを使用しているため
現時点でのMSYS2では対応できないのだと思う。 - sqlite3バグ回避
- 作業フォルダ内の、サーバ名のフォルダにて”Gemfile”をエディタで開く。
- gem “sqlite3″の行を下記に書き換えて保存
gem 'sqlite3', git: "https://github.com/larskanis/sqlite3-ruby", branch: "add-gemspec"
この設定により、sqlite3のソースがgithubからダウンロードされる
ここで、gitをインストールしていない場合は、git for Windowsをインストールしておく必要がある。 - (Gitをインストールしていない場合)Git for Windowsのインストール
ここからインストーラをダウンロード->https://gitforwindows.org/
手順は割愛する。 - Git Bashからプロキシの設定
git config --global http.proxy http://proxy.example.com:[port] git config --global https.proxy http://proxy.example.com:[port]
- 再度サーバインストール(bundle install)
cd C:\Programming\Web\Ruby\sample bundle install
- sqlite3のバージョン
Using sqlite3 1.3.13.20180326210955 from https://github.com/larskanis/sqlite3-ruby (at add-gemspec@1027509)
2019年2月時点で、上記のバージョンが表示されていればOK
インストールに時間がかかるので、コーヒーでも飲みながら待つ。
- サーバ起動
[作業フォルダ]\[サーバ名のフォルダ]において、下記コマンドを実行rails s
しばらくすると、
* Listening on tcp://0.0.0.0:3000
と表示される。(デフォルト)
- サーバの確認
ブラウザを起動し、下記アドレスに接続。localhost:3000
この画面が表示されれば、成功である。
まとめ
Windowsではsqlite3関連のバグでうまくRailsが建てられなかった。
しかも、情報が少なくて悩まされた。
Ubuntu-WSLではもっとすんなりいったのになぁ。
コメント