2012-02-16 39 views
0

アップデート:実際には自分自身でmySQLベースのアプリケーションを使用していても、まだソケットエラーが発生する -レールでソケット経由でアクセスすると、私のレールが壊れてしまうのはなぜですか?

Mysql2 ::エラー:ソケット '/ opt/local/var/run/mysql5/mysqld.sock '(2)

だから、私のmysqlは台無しにならなければなりませんが、修正方法はわかりません。私はmysqlを通してそれを完全にOKにすることができ、私は自分のデータベースを使用し、mysqlプロンプトでテーブルから選択することができます。

しかし、レールアプリまたはレールコンソール私はちょうど働くことができません。

私はmysqlとpostgresの両方のデータベースにアクセスしようとしていますが、私がmysqlにアクセスしようとすると私はpostgresの情報を取得します! 注:私は 'to' postgresに移動しようとしています。私はそれが「マスター」(カウントした場合)とmysqlを古いデータのソースとみなします(読み込み専用)。

具体的には、各データベースにusersテーブルがあります。 私は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"` 

しかし... 返されるデータはpostgres NOT mysqlからのものです。私は、異なるユーザーテーブルの列名が全く違っていて、私が予想していた464の代わりに5つのレコードしかないことを知ることができます。

私はそれが可能でなければならないと確信していますが、私は間違った名前空間を持っていますが、私が試したすべての組み合わせはこれまで働いていません。

私はMysqlUser :: OldAppに「Oldapp」にdirectorty名とモデル名を変更しようとしたが、私はそれを行うときにOldappを試してみてください::私は

Mysql::Error: Can't connect to local MySQL server through socket '/opt/local/var/run/mysql5/mysqld.sock' (2) 
from /Users/michaeldurrant/.rvm/gems/[email protected]_Abroad101/gems/activerecord-3.1.3/lib/active_record/connection_adapters/mysql_adapter.rb:931:in `real_connect' 
+0

非常に明白なことかもしれません。しかし、database.ymlファイルを変更した後にサーバーを再起動しましたか? –

+0

警告のため... Mysql :: User == User。 Mysqlディレクトリと名前空間を別の名前に変更しようとしました – Fivell

+0

こんにちはPhyo、良い提案。私がやっていることは、コンソールを使ってリロードしていることです!環境をリロードするたびに私はそれが何を言うと、環境をリロードするので、すべての変更を適用すると信じて –

答えて

2

を取得MysqlUser.allあなたはソケットパスを追加できますmysql_development中:/etc/mysql/my.cnfあなたはまた、どのようなソケットで見ることができ

0

(S)Y:このファイルを参照してください

mysql_development: 
    adapter: mysql 
    encoding: utf8 
    username: my_user_name 
    database: oldapp_development 
    socket: '/var/run/mysqld/mysqld.sock' 

システム上のソケットパスを見つけるために私たちのmysqlサーバーは、本当にが開かれています。まず、あなたがMySQLサーバのPID必要があります。このPIDを持つ

PID=pidof mysqld 

を、あなたは、ソケット(複数可)を確認することができますMySQLがオープンしました:

lsof -p $PID | grep sock 

をすることができますチェックパスと権利の後このソケットに接続します。

関連する問題