XAMPPでRubyからMySQLサーバにつなぐ on Windows10 not Rails

02, Sep, 2021

環境

  • Windows 10
  • XAMPP v3.3.0:
    • c/xampp/apache/conf/httpd.conf のAddHandler行に .rb を追記
    • c/xampp/apache/conf/httpd.conf をいじってトップページを変える。

      DocumentRoot "C:/xampp/htdocs/XXXXXX"
      <Directory "C:/xampp/htdocs/XXXXXX">
      :
      :
      <IfModule dir_module>
      DirectoryIndex index.rb index.php 
      </IfModule>

    • http://localhost でブラウザからindex.rbを表示。httpsで繋げないので何か設定不足だと思う。

  • Ruby v3.0.2 
    • インストーラを使った。
    • tiny_tdsのために devkit 付きのパッケージをダウンロード。
    • rails は使いません、知らないので。(環境の都合で使えない)
  • tiny_tds 
    • Rubyライブラリ。DBに接続する。(https://github.com/rails-sqlserver/tiny_tds) 
    • gem install tiny_tds #コマンドプロンプト
  • MySQL 


XAMPP を起動し、コントロールパネルからMy SQLのstartボタンを押す。

隣のAdminボタンをクリックして、サーバにアクセス。
データベースを新規作成する。
アカウントとかも設定するのかもしれない。

tiny_tdsを使ってサーバにつなぐ方法で苦しんでいて、
require 'mysql' を使ってつながないで処理しちゃう方法があるので悩んでいる。
c:/xampp/mysql/lib~~ の中にある libmysql.dll を ruby/binにコピペする方法があるらしいけどまず/lib~~がない。
どちらにしろwindows10にmysql環境を整える必要がありそう。
tiny_tdsはサーバに接続するので、XAMPPで完結するからその点楽っぽいんだよな。

```
#!C:\Ruby30\bin\ruby.exe

require 'tiny_tds'

client = TinyTds::Client.new username: 'root', host: 'localhost', port: 3306, database: 'mydb_hoge', azure:true 
```

これが通るはずなんだけど、なかなか通らない。

問題のエラー
```
................in `connect': Adaptive Server connection failed (localhost) (TinyTds::Error)
        from C:/Ruby30/lib/ruby/gems/3.0.0/gems/tiny_tds-2.1.5/lib/tiny_tds/client.rb:60:in `initialize'
```

「```localhost```につながらないよ」

確認の過程で
XAMPPのMySQLサーバを一度おとしたら、MySQLサーバが立ち上がらなくなった。
サーバ側にも問題を起こしていたっぽい。
xampp\mysql\backup のファイルをすべてコピーして、xampp\mysql\data に上書きすることでなんとかなった。

MySQLサーバを再起動しても localhost につながらず。
サーバにアカウントを作成して、パスワードを入力するように変更。
```
client = TinyTds::Client.new username: 'hoge', password: 'hoge', host: 'localhost', port: 3306, database: 'mydb_hoge', azure:true 
```
しかしつながらない。
「 tiny_tdsはTLS/1.2に対応してないんじゃないの?」みたいなgithubのissue(2018頃)も見つけたりして面倒だな。


bundleをためす。コマンドプロンプトから
$ gem install bundle
$ bundle init

Gemfileができるらしい。。。。。。けどGemfileを探したらなんかいっぱいあってどれを参照してるの?


これかもしれない。
https://logicalerror.seesaa.net/article/458605576.html

Ruby+devkit をインストール後、Winアプリに
```Start Command Prompt with Ruby``` 
が追加されているのでこのアプリからコマンドプロンプトを立ち上げる。
```$ gem install ruby-mysql```
=> ```require 'mysql' ``` が通るようになった!

```
#!C:\Ruby30\bin\ruby.exe

require 'mysql'

client = Mysql.connect("127.0.0.1", "root", "", "mydb_hoge")
response = client.query('CREATE TABLE user_password (username text, password text)')
```

コメント