更新:事实上,当我自己拥有一个基于mySQL的应用程序时,我仍然会收到套接字错误 -
Mysql2 ::错误:无法通过套接字连接到本地MySQL服务器'/opt/local/var/run/mysql5/mysqld.sock'(2)
所以我的mysql必须搞砸但我不知道如何解决它。我可以完全通过mysql进入它,我可以'使用'我的数据库并在mysql提示符下从表中选择。
但是rails app或rails console我无法正常工作。
我正在尝试访问mysql和postgres数据库,但是当我尝试访问mysql时,我获得了postgres信息! 注意:我正在尝试将''移动到'postgres,我认为它是'master'(如果它很重要)和mysql是我想要获取的旧数据的源(只读)。
具体来说,我在每个数据库中都有一个用户表。 我在database.yml文件中有以下内容:
common: &common
adapter: postgresql
encoding: unicode
host: localhost
encoding: UTF8
username: my_user_name
development:
<<: *common
database: newapp_development
pool: 5
mysql_development:
adapter: mysql
encoding: utf8
username: my_user_name
database: oldapp_development
我在postgres中有一个用户表和一个用户模型:
class User < ActiveRecord::Base
end
我有一个mysql中的用户表和一个用户模型,我放在models / Mysql子目录中。 它仍称为user.rb,但其内容为:
class Mysql::User < ActiveRecord::Base
establish_connection "mysql_development"
end
然而,当我进入控制台并执行Mysql :: User.all时,我得到:
`[1] pry(main)> Mysql::User.all
(pry):1: warning: toplevel constant User referenced by Mysql::User
User Load (2.6ms) SELECT "users".* FROM "users"`
... BUT 返回的数据来自postgres NOT mysql。我可以说,不同用户表中的列名完全不同,只有5个记录,而不是我期待的464。
我确信它一定是可能的,但我只是把命名空间错了或者其他东西,但我尝试的每一个组合到目前为止都没有用过。
我尝试将directorty名称更改为'Oldapp',将模型名称更改为OldApp :: MysqlUser但是当我这样做并尝试Oldapp :: MysqlUser.all时我得到了
Mysql::Error: Can't connect to local MySQL server through socket '/opt/local/var/run/mysql5/mysqld.sock' (2)
from /Users/michaeldurrant/.rvm/gems/ruby-1.9.2-p290@ruby1.9.2_Abroad101/gems/activerecord-3.1.3/lib/active_record/connection_adapters/mysql_adapter.rb:931:in `real_connect'
答案 0 :(得分:2)
您可以在mysql_development
中添加套接字路径:
mysql_development:
adapter: mysql
encoding: utf8
username: my_user_name
database: oldapp_development
socket: '/var/run/mysqld/mysqld.sock'
要查找系统上的套接字路径,请参阅此文件:/etc/mysql/my.cnf
答案 1 :(得分:0)
您还可以查看您的mysql服务器真正打开的套接字。首先,你需要mysql服务器pid:
PID=pidof mysqld
使用此pid,您将能够看到mysql已打开的套接字:
lsof -p $PID | grep sock
您可以在检查此套接字的路径和权限后。