以前、Ruby 2.0.0を使用していたのですが、パソコン初期化してRuby on Railsを再インストールしようとしたところ、いろいろ変わっていたのでメモ書きを残します。
以前の環境構築手順はこちらです。
なお、今回のバージョンは以下のとおりです。
- Windows 10 Pro(64bit)
- Ruby 2.4.3-1(x64)
- gem 2.7.4
- Rails 5.1.4
- mysql2 0.4.10
Rubyのインストール
まずは、RubyInstallerをダウンロードします。
RubyInstaller公式サイトより、「Ruby 2.4.3-1(x64)」をダウンロードしました。
2018年1月8日時点の最新バージョンは「Ruby 2.5.0-1(x64)」だが、安定版は2.4.X。
また、2.5.0を使用した場合、Railsをインストールする際にnokogiri-1.8.1がインストールできくてめんどくさかったので、2.4.Xの方が良いかと思います。
インストーラーをダウンロードしたら実行します。
ライセンス同意して次へ。
インストールするフォルダをC直下や適当な位置にします。
このフォルダは「C:\Program Files」などの半角空白が入るものは避けたほうがいいです。
そして、Ruby実行ファイルへの環境変数PATH追加をチェックしておきます。
このチェックでPATHへ追加されるのは、ユーザー環境変数のPATHに追加されていましたが、後でシステム環境変数のPATHの方へ追加しておくのがいいと思います。
インストール完了画面に、「MSYS2のインストールを実行するか」のチェックがあるので、チェックオンにして終了します。
すると、コマンドプロンプトが立ち上がるので、1・2・3と順に入力してインストールしていきます。
これは「ridk install」というコマンドでも開くことができます。
Ruby 2.4.0より前は「DEVELOPMENT KIT」というものが必要だったが、2.4.0以降はRubyInstallerにこの「MSYS2 toolkit」が含まれて、「DEVELOPMENT KIT」は不要みたいです。
Rubyがインストールできたら、バージョンを確認。
>ruby -v
ruby 2.4.3p205 (2017-12-14 revision 61247) [x64-mingw32]
gemのアップデート
Rubyがインストールできたら、gemのアップデートを行います。
>gem -v
2.6.14
>gem list
*** LOCAL GEMS ***
bigdecimal (default: 1.3.0)
did_you_mean (1.1.0)
io-console (default: 0.4.6)
json (default: 2.0.4)
minitest (5.10.1)
net-telnet (0.1.1)
openssl (default: 2.0.5)
power_assert (0.4.1)
psych (default: 2.2.2)
rake (12.0.0)
rdoc (default: 5.0.0)
test-unit (3.2.3)
xmlrpc (0.2.1)
>gem update --system
>gem -v
2.7.4
>gem list
*** LOCAL GEMS ***
bigdecimal (default: 1.3.0)
bundler (default: 1.16.0)
did_you_mean (1.1.0)
io-console (default: 0.4.6)
json (default: 2.0.4)
minitest (5.10.1)
net-telnet (0.1.1)
openssl (default: 2.0.5)
power_assert (0.4.1)
psych (default: 2.2.2)
rake (12.0.0)
rdoc (default: 5.0.0)
rubygems-update (2.7.4)
test-unit (3.2.3)
xmlrpc (0.2.1)
Railsのインストール
続いて、Railsのインストール行います。
>gem install rails
Done installing documentation for concurrent-ruby, i18n, thread_safe, tzinfo, activesupport, rack, rack-test, mini_portile2, nokogiri, crass, loofah, rails-html-sanitizer, rails-dom-testing, builder, erubi, actionview, actionpack, activemodel, arel, activerecord, globalid, activejob, mini_mime, mail, actionmailer, nio4r, websocket-extensions, websocket-driver, actioncable, thor, method_source, railties, sprockets, sprockets-rails, rails after 55 seconds
35 gems installed
>rails -v
Rails 5.1.4
>gem list rails
*** LOCAL GEMS ***
rails (5.1.4)
rails-dom-testing (2.0.3)
rails-html-sanitizer (1.0.3)
sprockets-rails (3.2.1)
mysql2について
アプリケーションでmysql2を使用していたのだが、環境作るのにものすごくつまづきました。
まず、アプリケーションのフォルダで「bundle install」コマンドでgemインストールを行います。
「–path vendor/bundle」で、システムのgemではなく、アプリケーション内でgemをインストールしました。
何やら「MySQL Connector/C」というものを使用してビルドしろとメッセージが。
>bundle install --path vendor/bundle
…
Fetching mysql2 0.4.10 (x64-mingw32)
Installing mysql2 0.4.10 (x64-mingw32)
…
Bundle complete! 33 Gemfile dependencies, 93 gems now installed.
Bundled gems are installed into `./vendor/bundle`
Post-install message from mysql2:
======================================================================================================
You've installed the binary version of mysql2.
It was built using MySQL Connector/C version 6.1.11.
It's recommended to use the exact same version to avoid potential issues.
At the time of building this gem, the necessary DLL files were retrieved from:
http://cdn.mysql.com/Downloads/Connector-C/mysql-connector-c-6.1.11-win32.zip
This gem *includes* vendor/libmysql.dll with redistribution notice in vendor/README.
======================================================================================================
とりあえず、MySQL公式サイトより、「MySQL Connector/C」をダウンロードして、適当な場所へ配置します。
以下のコマンドでbundlerのビルドオプションへ追加すると、「ユーザーディレクトリ\.bundle\config」に設定されました。
「アプリケーションディレクトリ\.bundle\config」には追加されないのか?よくわからん。。
この状態で再度「bundle install」を実行するが、変化がない。
ビルドオプションが効いていない?
>bundle config build.mysql2 '--with-mysql-dir="C:\Tools\mysql-connector-c-6.1.11-winx64"'
>bundle install
ひとまず放置してマイグレーションを行ってみたが、Loadエラー。
そもそも「mysql2 0.4.10 (x64-mingw32)」ってのはまだRuby 2.4.Xに対応していないみたいです。
gemのフォルダ内を見てみたが、2.3までのフォルダ・バイナリファイルはあるが、2.4のフォルダがありません。
>bundle exec rake db:migrate
rake aborted!
LoadError: cannot load such file -- mysql2/2.4/mysql2
えー、めんどくさい。。
と思いつつ調べてると、mysql2 README-GitHubにWindowsに関する記載がありました。
要約すると、以下のようなこんな感じです。
- mysql2のgemはデフォルトでmysql.comからMySQL Connector/Cをダウンロードして使用する。ローカルのものを使用する場合は、「–with-mysql-dir=c:/mysql-connector-c-x-y-z」を付ける。(パスはスラッシュ)
- デフォルトでmysql2のgemディレクトリに「libmysql.dll」がコピーされる。それを防ぐには、「–no-vendor-libmysql」を付ける。
- 上記で防いだ場合、「libmysql.dll」は環境変数「RUBY_MYSQL2_LIBMYSQL_DLL」、mysql2のgemディレクトリ「vendor/libmysql.dll」、システム環境変数「PATH」の3つから順に探して見つかったものを使用する。
ふむふむ。
じゃあ、「bundle install」でビルドオプションが効かなかったので、「gem install」で直接インストールしてみてはどうか。
上記の通りオプションを入力し、MySQL Connector/Cの「libmysql.dll」ファイルはruby.exeと同じフォルダに配置します。
Rubyインストール時には、システム環境変数PATHには登録されておらず、ユーザー環境変数PATHにしか登録されていないので注意です。
>bundle exec gem install mysql2 --platform=ruby -- '--no-vendor-libmysql --with-mysql-dir="C:/Tools/mysql-connector-c-6.1.11-winx64"'
Fetching: mysql2-0.4.10.gem (100%)
Temporarily enhancing PATH for MSYS/MINGW...
Building native extensions with: '--no-vendor-libmysql --with-mysql-dir="C:/Tools/mysql-connector-c-6.1.11-winx64"'
This could take a while...
Successfully installed mysql2-0.4.10
Parsing documentation for mysql2-0.4.10
Installing ri documentation for mysql2-0.4.10
Done installing documentation for mysql2 after 0 seconds
1 gem installed
お、いけたっぽい。
さっきビルドオプションが効かなかったのは、パスの記述がスラッシュではなく¥マークだったからか…?
とりあえず「x64-mingw32」の方をアンインストールしました。
>bundle exec gem uninstall mysql2
Select gem to uninstall:
1. mysql2-0.4.10
2. mysql2-0.4.10-x64-mingw32
3. All versions
> 2
Successfully uninstalled mysql2-0.4.10-x64-mingw32
Gemfile.lockを直接修正しておきます。
>修正前
mysql2 (0.4.10-x64-mingw32)
>修正後
mysql2 (0.4.10)
再び、マイグレーションするとエラーなくなり通りました。
アプリケーション動いたし、とりあえずこれでいいか…。
>bundle exec rake db:migrate
>rails s
最後に
WindowsでのRuby on Railsは、環境構築でつまづくこと山のごとし。
コメント
ありがとうございます。
参考にさせていただきます。
>spaさん
閲覧していただきありがとうございます。
[…] あとここも見た。上より分かりやすいかも。 […]