はじめに
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 起動成功!