[Ruby on Rails]WindowsでRailsサーバを建てるメモ[2019.02]

Ruby

概要

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のコンパイル環境をまとめてインストールできる。

  1. インストーラの入手
    ダウンロード元->https://rubyinstaller.org/downloads/
    ここから、自分のOSに合ったRubyInstallerを入手する。
    DevKitも付いてくる。(MSYS2という仮想Linux環境)
    もちろん、gem(Ruby用パッケージマネージャ)も使えるようになる。
  2. プロキシの設定(恒久的)
    MSYS2のインストールでプロキシ回避が必要になるため、システム環境変数に新規変数として以下の値を書き込む。
  3. インストール

    1. 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鍵が一致しないエラーが出ることがある。
      何度か繰り返しているうちに成功する。

  4. PATHの確認
    新しいPowerShellを開き、環境変数を確認するコマンドを入れる。

    > $Env:Path.Split(";")

    結果に、Rubyのパス(例: C:\Ruby\bin)があればOK。
    続いて、実際にPowerShellからRubyが呼べるか確認。

    ruby -v

    バージョンが表示されればOK。

    社外持ち出しPCなどでProxy設定を外す場合は、環境変数を外しておく。

2.  Railsサーバのインストール

Railsサーバは、gem経由でインストールする。

  1. (Proxy設定を解除している場合)PowerShellでProxy設定を行う(一時的)
    Set-Item -path Env:http_proxy -value http://proxy.hogehoge.com:[port]
  2. gemコマンドでインストール
    gem install rails
  3. 確認
    rails -v
    

ここで、sqlite3をインストールする記事に出くわすことが多いが、
これもgem経由でインストールしてしまうのでその必要はない。

3. サーバの準備

  1. (Proxy設定を解除している場合)PowerShellでProxy設定を行う(一時的)
    Set-Item -path Env:http_proxy -value http://proxy.hogehoge.com:[port]
  2. 作業フォルダに移動(例: C:\Programming\Web\Ruby )
    cd C:\Programming\Web\Ruby\

    Linuxでは、ここにさらにサーバ名を入れたフォルダを作るが、Windows版では自動生成されるので不要

  3. 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では対応できないのだと思う。

  4.  sqlite3バグ回避
    1. 作業フォルダ内の、サーバ名のフォルダにて”Gemfile”をエディタで開く。
    2. gem “sqlite3″の行を下記に書き換えて保存
      gem 'sqlite3', git: "https://github.com/larskanis/sqlite3-ruby", branch: "add-gemspec"
      

      この設定により、sqlite3のソースがgithubからダウンロードされる
      ここで、gitをインストールしていない場合は、git for Windowsをインストールしておく必要がある。

    3. (Gitをインストールしていない場合)Git for Windowsのインストール
      ここからインストーラをダウンロード->https://gitforwindows.org/
      手順は割愛する。
    4. Git Bashからプロキシの設定
      git config --global http.proxy http://proxy.example.com:[port]
      git config --global https.proxy http://proxy.example.com:[port]
    5. 再度サーバインストール(bundle install)
      cd C:\Programming\Web\Ruby\sample
      bundle install
    6. sqlite3のバージョン
      Using sqlite3 1.3.13.20180326210955 from https://github.com/larskanis/sqlite3-ruby (at add-gemspec@1027509)

      2019年2月時点で、上記のバージョンが表示されていればOK
      インストールに時間がかかるので、コーヒーでも飲みながら待つ。

  5. サーバ起動
    [作業フォルダ]\[サーバ名のフォルダ]において、下記コマンドを実行

    rails s

    しばらくすると、

    * Listening on tcp://0.0.0.0:3000

    と表示される。(デフォルト)

  6. サーバの確認
    ブラウザを起動し、下記アドレスに接続。

    localhost:3000


    この画面が表示されれば、成功である。

まとめ

Windowsではsqlite3関連のバグでうまくRailsが建てられなかった。

しかも、情報が少なくて悩まされた。

Ubuntu-WSLではもっとすんなりいったのになぁ。

コメント

Japanese
タイトルとURLをコピーしました