Ruby
RubyOnRails
Windows10
mysql5.7

Windows10でRubyOnRailsの開発環境作ろうとして詰まったのでメモ

作ろうとした開発環境

  • Win10 64bit
  • Ruby 2.4
  • Rails 5.1
  • Mysql 5.7

結果

Rubyだけバージョン下げた。

  • Win10 64bit
  • Ruby 2.3
  • Rails 5.1
  • Mysql 5.7

経緯

業務でRailsのプロジェクトにアサインされたはいいけどテスト環境がまだない(Amazon Linux想定)ので
とりあえずローカルで作っちゃおうってなった
ちなみにWinマシンでRails環境構築は初めて

Rubyのインストール

RubyInstallerを使う。
通常ならそのままいけるが社内プロキシにひっかかってこのままじゃできなかった。
なので先にMSYS2をインストールする

  • インストーラDL先:MSYS2

RubyInstallerはMSYS2のwgetやらを利用してるみたい。
プロキシつかわないならRubyInstallerのみでOK

MSYS2のインストール後、プロキシ設定は以下

MSYS2プロキシ設定

  • proxy環境変数読み込みシェルの作成

ユーザーやパスワードはURLエンコする

/msys64/etc/profile.d/proxy.sh
export http_proxy=http://{user}:{password}@{ip:*.*.*.*}:{port}/
export https_proxy=http://{user}:{password}@{ip:*.*.*.*}:{port}/
export ftp_proxy=http://{user}:{password}@{ip:*.*.*.*}:{port}/
export HTRP_PROXY=http://{user}:{password}@{ip:*.*.*.*}:{port}/
export HTTPS_PROXY=http://{user}:{password}@{ip:*.*.*.*}:{port}/
export FTP_PROXY=http://{user}:{password}@{ip:*.*.*.*}:{port}/
  • wgetのプロキシ設定

/msys2/etc/wgetcの80~90行目をコメントアウト外して編集

# You can set the default proxies for Wget to use for http, https, and ftp.
# They will override the value in the environment.
https_proxy = http://{user}:{password}@{ip:*.*.*.*}:{port}/
http_proxy = http://{user}:{password}@{ip:*.*.*.*}:{port}/
ftp_proxy = http://{user}:{password}@{ip:*.*.*.*}:{port}/
# If you do not want to use proxy at all, set this to off.
use_proxy = on
  • pacmanのcurlとwgetコマンドを開放

18~19行目をコメントアウト外す

/msys64/etc/pacman.conf
XferCommand = /usr/bin/curl -C - -f %u > %o
XferCommand = /usr/bin/wget --passive-ftp -c -O %o %u

RubyInstallerの操作

とりあえずそのままNext押してればOK
Rubyのインストールが終わればプロンプトの画面に移る。
プロキシ設定しない場合はこの画面で1->2->3の順でOK

MSYS2を先にインストールしてる場合は2->3の順で実行

DevKitインストール

RubyInstallerからDevKitをDLして適当なとこに展開(私はRuby2.4の下にdevKitって作った)

以下コマンドを実施

$cd Ruby24-x64\devkit
$devkitvars.bat
$ruby dk.rb init
$ruby dk.rb install

おめでとうRubyはインストールできた。あぁ次はRailsだ……

ここまで1時間くらいかかった。
ここからがめっちゃハマった……

とりあえずgemの更新と必要なライブラリのインストール

以下コマンド実施
SQLITEはいるかわからんがとりあえず

# proxy環境は末尾に「-p http://{user}:{password}@{ip:*.*.*.*}:{port}/」をつける
$gem update --system
$gem install sqlite3
$gem install nokogiri
$gem install bundler

ついにrailsのインストール

$gem install bundler
$gem install rails
$rails -v
Rails 5.1.4

Railsインストール完!!だがここからが地獄だ……

とりあえずRailsコマンド叩いてみる

$bundle exec rails new sample -d mysql

次にdatabase.ymlを編集する
{} で囲んでいるを編集、ついでにMysqlのユーザーを作っておく

/sample/config/database.yml
default: &default
  adapter: mysql2
  encoding: utf8
  pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
  username: root
  password: {rootpassword}
  host: localhost

development:
  <<: *default
  username:{developmentuser} 
  password:{developmentpass}
  database: sample_development

# 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:
  <<: *default
  username: {developmentuser} 
  password: {testpass}
  database: sample_test

production:
  <<: *default
  database: sample_production
  username: {productionuser} 
  password: <%= ENV['SAMPLE_DATABASE_PASSWORD'] %>

じゃあDBをつくろうとしたらMysql2のエラーでだめだった……
mysql2の読み込みでエラーになってるからgemのディレクトリ
/Ruby23-x64/lib/ruby/gems/2.4.0/gems/mysql2-0.4.9-x64-mingw32/lib/mysql2をみにいったら……
参照してるのはlib/mysql2/2.4/~なのに2.4のディレクトリがない・・・

つまりmysql2がRuby2.4にまだ対応してないってオチでした

なのでRuby2.3に落としてすべて最初からやり直し...
Linuxならrbenvでバージョンかえればいいだけなのに……

やっぱRailsはWinでやるもんじゃないわ……

とりあえずRuby2.3に落として今のところ開発してますが、他のライブラリでも同様なことが起きそうで怖い。
しかも想定してる環境と違いが出るのが一番まずいかも……