Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/56.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/53.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Rake db:create继续使用/tmp/mysql.sock,尽管设置了my.cnf_Mysql_Ruby On Rails - Fatal编程技术网

Rake db:create继续使用/tmp/mysql.sock,尽管设置了my.cnf

Rake db:create继续使用/tmp/mysql.sock,尽管设置了my.cnf,mysql,ruby-on-rails,Mysql,Ruby On Rails,我在Mac电脑上,使用brew安装更新的MySQL。为了简化本地数据库的创建,我从本地root用户(我知道,我知道)那里取下了密码,在创建了一个新的Rails应用程序(Rails new myapp-d mysql)之后,应该可以运行rake db:create,对吗 然而,尽管设置了定义标准mysql.sock位置的/etc/my.cnf [mysqld] socket=/usr/local/var/mysql/mysql.sock [client] socket=/usr/local/va

我在Mac电脑上,使用brew安装更新的MySQL。为了简化本地数据库的创建,我从本地root用户(我知道,我知道)那里取下了密码,在创建了一个新的Rails应用程序(
Rails new myapp-d mysql
)之后,应该可以运行
rake db:create
,对吗

然而,尽管设置了定义标准mysql.sock位置的
/etc/my.cnf

[mysqld]
socket=/usr/local/var/mysql/mysql.sock

[client]
socket=/usr/local/var/mysql/mysql.sock
。。。Rails仍然不会在
rakedb:create
上使用新定义的
mysql.sock
文件:

rake db:create
Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)
Couldn't create database for {"adapter"=>"mysql2", "encoding"=>"utf8", "reconnect"=>false, "database"=>"delayed_jobs_development", "pool"=>5, "username"=>"root", "password"=>nil, "host"=>"localhost"}, charset: , collation: 
运行
mysqladmin变量
会列出正确的套接字文件位置,正如
mysql--help
一样。我重新启动了MySQL服务器,甚至重新创建了Rails应用程序

所以我的问题是:还有什么可以将套接字文件默认为
/tmp/mysql.sock
,或者是否有一个备用的、最好是全局的配置文件,我可以在其中指定rake任务将执行的位置?rake任务是否可以调用使用不同配置文件的不同命令行MySQL工具

显然,我可以创建一个从
/tmp
位置到真实位置的符号链接,或者编辑
数据库.yml
文件以引用它。我知道如何让Rails正确地与DB服务器通信,但关键是一旦设置了正确的默认值,因此我在本地创建的任何未来Rails应用程序都可以不进行额外编辑(重新启动时清除/tmp/mysql.sock)

事实上,我甚至不知道它为什么试图通过套接字文件进行连接,因为我的
database.yml
文件告诉它使用主机名:

development:
  adapter: mysql2
  encoding: utf8
  reconnect: false
  database: myapp_development
  pool: 5
  username: root
  password:
  host: localhost

正如MySQL文档所说,
/tmp/MySQL.sock
是套接字文件的默认位置。这也是rails的默认设置(详见下文)

如前所述,您始终可以在文件中显式设置套接字(您配置的套接字,由
mysqladmin变量
返回):

我认为,当您设置
host:localhost
时,连接是通过套接字文件进行的。如果将其更改为
127.0.0.1
,则

我发现了相当旧的信息(a和a),这意味着在解析套接字时使用了
MYSQL\u UNIX\u ADDR
环境变量。Ruby/MySQL的开发人员也看到了这一点,他在其中说改为设置
MySQL\u UNIX\u PORT
变量。第三个env变量是连接器中提到的
MYSQL\u SOCKET

export MYSQL_UNIX_ADDR=/usr/local/var/mysql/mysql.sock
export MYSQL_UNIX_PORT=/usr/local/var/mysql/mysql.sock
export MYSQL_SOCKET=/usr/local/var/mysql/mysql.sock
我不知道这些变量是否在过程中得到了评估。不过,你可以试试

现在,rails表示使用了已配置的
套接字
,并且默认为
/tmp/mysql.sock
(在中设置)。似乎没有其他位置得到检查。我在rails使用的默认
Ruby/MySQL
适配器中没有找到任何其他内容


因此,基本上——我不是这方面的专家——我不认为有办法为MySQL套接字文件设置全局默认位置,该文件由rails或使用的默认适配器进行评估。

首先,感谢您对此所做的深入回答和研究。很高兴看到你花时间到处闲逛。我尝试了所有三个环境变量,MYSQL\u UNIX\u PORT成功了。这解决了我的问题,我建议app_generator.rb也包括/usr/local/var/mysql/mysql.sock for brew mysql安装。
export MYSQL_UNIX_ADDR=/usr/local/var/mysql/mysql.sock
export MYSQL_UNIX_PORT=/usr/local/var/mysql/mysql.sock
export MYSQL_SOCKET=/usr/local/var/mysql/mysql.sock