2012-02-16 5 views
0

업데이트 : 실제로 자체적으로 mySQL 기반 응용 프로그램을 사용하는 경우에도 여전히 소켓 오류가 발생합니다. -레일에서 소켓을 통해 액세스 할 때 왜 내 레일이 깨지나요?

Mysql2 :: 오류 : 소켓을 통해 로컬 MySQL 서버에 연결할 수 없습니다 '/ opt/local/var/run/mysql5/mysqld.sock '(2)

그래서 내 mysql이 엉망이되어야하지만 어떻게 수정해야할지 모르겠다. 나는 mysql을 통해 완전히 괜찮아 질 수 있으며, 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 

나는 포스트 그레스의 사용자 테이블과 사용자 모델을 가지고 :

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 개의 레코드 만 있다는 것을 알 수 있습니다.

나는 그것이 가능해야하지만 나는 네임 스페이스가 잘못되었거나 무언가를 가지고 있다고 확신하지만 지금까지 시도한 모든 조합은 지금까지 효과가 없다.

나는 'Oldapp'와 OldApp :: MysqlUser에 모델 이름에 directorty 이름을 변경하려하지만 난 그렇게하고 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/[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

당신이 소켓 경로를 추가 할 수 mysql_development에서 : /etc/mysql/my.cnf 또한 어떤 소켓에서 볼 수

0

(들) 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 

할 수 있습니다 체크 경로와 권리 후 이 소켓에.

관련 문제