Windows10で、Redmine 5.04(Mysql 8.0, Ruby 3.1)すべて手動インストール

# はじめに
Redmine単体 をWindows 10にインストールしたときのメモ

version:
 Redmine 5.0.4
 MySQL 8.0.32
 Ruby 3.1.3

---

# 経緯
Windows10, Cygwin の環境に、Mysql 8.0 が別にあったので、
Redmine単体をいれて普通に動かせるかと思ってやってみると、いろいろ動かなかったため
その試行錯誤して、インストールできるまでの備忘録

---
# もともとあったCygwin のRuby 2.8を使った場合

公式手順
http://guide.redmine.jp/RedmineInstall/

> Step 6 - データベースのテーブル等の作成
> データベース上にテーブルを作成してください。Redmineのインストールディレクトリで下記コマンドを実行します。
>
> RAILS_ENV=production bundle exec rake db:migrate
でつまづく。

RubyのMysql2　とMySQLサーバーと接続せず、以下のエラー
~~~
Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock'
~~~

その後、Cygwinのmount環境で、上記のソケットファイルを作ったり、
Mysql の my.iniでソケット設定してみたり、Redmine のdatabase.yml　をいじったりしても
改善せず。WindowsでMYSQLとのソケット接続は、やはり少し無理があるか。断念。



# Ruby新規インストール　での解決方法

以下の記事を参考に手動インストールしてみることに。。。
https://qiita.com/tchoco/items/1909a52edbb4a548a3c5

上記のサイト同様、みんなMySQL接続でつまづく。まずは、上記サイトのstep 5までいく

- Mysqlのところは、同じエラーが出て、最初は、Mysql 8.0 サーバーにある libを使って
~~~
  --with-mysql-lib="c:\mysql\mysql server 8.0\lib"
~~~

 Mysql2 の作成してみても、リンクができず、DLL作成失敗。バージョンが不一致か。
Ruby mysql2 は、Mysql 8.0とはそのままリンクできない
~~~
...
C:/Ruby31-x64/msys64/ucrt64/bin/../lib/gcc/x86_64-w64-mingw32/12.2.0/../../../../x86_64-w64-mingw32/bin/ld.exe: c:\Program Files\MySQL\MySQL Server 8.0/lib/mysqlclient.lib(C:/build/sb_1-9698795-1671207278.03/release/extra/zstd/zstd_objlib.dir/RelWithDebInfo/fse_decompress.obj):(.text$mn+0x43): undefined reference to `__security_check_cookie'
C:/Ruby31-x64/msys64/ucrt64/bin/../lib/gcc/x86_64-w64-mingw32/12.2.0/../../../../x86_64-w64-mingw32/bin/ld.exe: c:\Program Files\MySQL\MySQL Server 8.0/lib/mysqlclient.lib(C:/build/sb_1-9698795-1671207278.03/release/extra/zstd/zstd_objlib.dir/RelWithDebInfo/fse_decompress.obj):(.text$mn+0x6): undefined reference to `__chkstk'
C:/Ruby31-x64/msys64/ucrt64/bin/../lib/gcc/x86_64-w64-mingw32/12.2.0/../../../../x86_64-w64-mingw32/bin/ld.exe: c:\Program Files\MySQL\MySQL Server 8.0/lib/mysqlclient.lib(C:/build/sb_1-9698795-1671207278.03/release/extra/zstd/zstd_objlib.dir/RelWithDebInfo/fse_decompress.obj):(.text$mn+0x10): undefined reference to `__security_cookie'
...
~~~

- 次に Ruby on railsが windows mysqlで発生するエラー回避の方法を調べ
Mysql c connector 6.1  を使う方法にたどり着く。(Mysql 8.0には、C++ connenctorしかDownloadセンターになく
Cの8.0対応connector がない？）

以下のサイトから
 https://downloads.mysql.com/archives/c-c/
c connector 6.1をDownloadし、 Mysql2 のgem を作成し、connectorフォルダーのLibにあるlibmysql.dll
をRuby.exe があるフォルダーへ格納

~~~
gem install mysql2 -- --with-mysql-dir="c:\mysql_connector_6.1\"
~~~

- インストールの再開
　再開して、再度
> set RAILS_ENV=production
> bundle exec rake db:migrate
を実行、今度は、

~~~
Bundler::GemRequireError: There was an error while trying to load the gem 'mysql2'.
Gem Load Error is: Incorrect MySQL client library version! This gem was compiled for 6.1.11 but the client library is 10.5.5.
~~~

でとまる。

- libmysql.dll はどうした？
Downdloadした　mysql connector のDLLをRuby.exeにコビーしたのに。。ということで
上で生成したmysql2 は、実際どこの mysql.dllを使っているかを
**ruby のdep_walker を入れて調べると**
なんと ***libmariadb.dll***　missing   とあった。

~~~
c:\apps\redmine-5.0.4>dep_walker -c mysql2 -t
~~~
~~~
Gem mysql2-0.5.5:
  Extension: C:/Ruby31-x64/lib/ruby/gems/3.1.0/gems/mysql2-0.5.5/ext/mysql2/mysql2.so is missing: libmariadb.dll
  Extension: C:/Ruby31-x64/lib/ruby/gems/3.1.0/gems/mysql2-0.5.5/lib/mysql2/mysql2.so is missing: libmariadb.dll
~~~
そもそもmysql2 は、なぜか mysqlじゃなくて、mariadb を使用しようとしていた。

結局ruby.exe のところにある
___libmysql.dll をlibmariadb.dll に名前を変更して対応できた__

* Gemfileを再編集

もともとあったVersion付きのMysql2の箇所をコメントアウト
~~~
      when 'mysql2'
        # gem "mysql2", "~> 0.5.0", :platforms => [:mri, :mingw, :x64_mingw]
        gem "mysql2"
~~~


もう一度
> set RAILS_ENV=production
> bundle exec rake db:migrate

* 次にSSL接続ラー

もう一度
> set RAILS_ENV=production
> bundle exec rake db:migrate

今度は、SSL関連の接続エラー

~~~
C:/Ruby31-x64/lib/ruby/gems/3.1.0/gems/bundler-1.17.2/lib/bundler/shared_helpers.rb:118: warning: Pathname#untaint is deprecated and will be removed in Ruby 3.2.
rake aborted!
ActiveRecord::ConnectionNotEstablished: SSL connection error: unknown error number


Caused by:
Mysql2::Error::ConnectionError: SSL connection error: unknown error number

Tasks: TOP => db:migrate
(See full trace by running task with --trace)
~~~

これは、database.ymlで、SSLをdisableで回避
~~~
production:
  adapter: mysql2
  database: redmine
  host: localhost
  username: root
  password: "***"
  # Use "utf8" instead of "utfmb4" for MySQL prior to 5.7.7
  encoding: utf8mb4
  port: 3306
  ssl_mode: :disabled
  sslverify: false
~~~

* やっとMysql接続
今度は、DB接続でき、うまくいった。

* 残りは、thin 
thin をただ gem install しても、redmine では認識せず、
それをredmine のGemfileに gem thin を追加して

***やっとRedmine 起動成功!***