LoginSignup
4
1

More than 5 years have passed since last update.

Rustのmysql (rust-mysql-simple)で何故かUNIX Socketを見に行く問題

Last updated at Posted at 2018-08-09

追記。タイトルが良くなかったので変えました。r2d2もr2d2_mysqlも関係なくて、rust-mysql-simpleの部分でハマってました。

RustでWebアプリケーションを作っていて、RDBMSとしてMySQLを使おうとしていたところ、問題が。

こんなコード(サンプルをほぼ丸パクリ)で

extern crate mysql;
extern crate r2d2_mysql;
extern crate r2d2;
use std::env;
use std::sync::Arc;
use std::thread;
use mysql::{Opts,OptsBuilder};
use r2d2_mysql::MysqlConnectionManager;

fn main() {
    let db_url =  env::var("DATABASE_URL").unwrap();
    let opts = Opts::from_url(&db_url).unwrap();
    let builder = OptsBuilder::from_opts(opts);
    let manager = MysqlConnectionManager::new(builder);
    let pool = Arc::new(r2d2::Pool::builder()
                       .max_size(4)
                       .connection_timeout(std::time::Duration::new(2, 0))
                       .build(manager)
                       .unwrap());
}

実行すると

$ DATABASE_URL="mysql://root:password@127.0.0.1:3306/nanntoka" cargo run
   Compiling hoge v0.1.0 (file:///home/tmatsushima/Project/hoge)                                                                                        
    Finished dev [unoptimized + debuginfo] target(s) in 1.89s
     Running `target/debug/hoge`
thread 'main' panicked at 'called `Result::unwrap()` on an `Err` value: Error(Some("DriverError { Could not connect to address `/var/run/mysqld/mysqld.sock\': No such file or directory (os error 2) }"))', libcore/result.rs:983:5
note: Run with `RUST_BACKTRACE=1` for a backtrace.

mysqld.sock が見つからなかったよ、てへぺろ」

じゃぁどうするの

「接続先URLの後ろに ?prefer_socket=false オプションつけて」っということらしいです。
https://github.com/blackbeam/rust-mysql-simple/issues/150

だから、さっきみたいに cargo run するときに渡す環境変数を変更して、こんな感じ。

$ DATABASE_URL="mysql://root:password@127.0.0.1:3306/nanntoka?prefer_socket=false" cargo run

なんだそりゃ。接続先指定してるのに。

4
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
1