2011-01-05 2 views
8

config/database.yml에서 소켓 선언을 사용하는 방법은 무엇입니까?Ruby on Rails database.yml의 소켓 선언은 무엇입니까?

예제 코드 :이 줄은 주석이나되지 어떠했는지

staging: 
    adapter: mysql 
    encoding: utf8 
    database: (database) 
    pool: 5 
    username: (user) 
    password: (pass) 
    socket: /tmp/mysql.sock  # <--------- this line 

내 응용 프로그램이 작동합니다. 그럼 그게 뭡니까? 내가 떠날 이유가 무엇이고, 코멘트를 달거나 가치를 바꿀 수있는 이유는 무엇입니까?

답변

12

는 하나 개의 프로그램은 다른 하나의 TCP 연결 (A "소켓")를 열 수 있습니다. 첫 번째 프로그램은 두 번째 컴퓨터의 IP 주소와 프로그램이 수신하는 포트를 알아야합니다.

같은 컴퓨터에있는 두 프로그램이 서로 이야기하기를 원할 때도 Linux에서 TCP 연결을 열 수 있습니다. 그러나 그들은 또한 "소켓 파일"을 통해 연결을 열 수 있습니다. 리눅스는 TCP API와 비슷한 소켓 파일 API를 만든다. 그래서 소켓 파일을 통한 통신을 지원하기 위해 TCP를 통해 이미 네트워크를 통해 통신하는 프로그램을 업데이트하는 것은 그리 중요하지 않다. 소켓 파일은 TCP보다 빠르지 만 두 프로그램이 같은 컴퓨터에있을 때만 작동합니다.

+1

레일 4 응용 프로그램에서 '소켓'설정이 보이는 것 같습니다 무시해야합니다. 대신 적어도'rake db : migrate'가 작동하려면'host :/path/to/socket /'을 설정해야했습니다. – user569825

5

MySQL에는 유닉스 시스템, tcp/ip 및 도메인 소켓에서 두 가지 통신 방법이 있습니다. 소켓 Rails 또는 데이터베이스 드라이버를 지정하면 네트워크 연결 대신 소켓을 사용하게됩니다. 소켓을 사용하는 것이 YMMV가 더 빠를 수 있습니다. 두 프로그램은 네트워크를 통해 서로 대화 할 때

http://dev.mysql.com/doc/refman/5.5/en/connecting.html

+0

추가로 - 소켓은 DB가 응용 프로그램 서버와 동일한 상자에서 실행되는 경우에만 작동합니다. 따라서이 메커니즘은 클러스터 된 배포에 적합하지 않습니다. – DrewM

0

내 database.yml에 지정된 소켓으로 인해 오후 내내 낭비했습니다. 테스트 환경의 데이터베이스 사양은 단순히 구문 분석되지 않았습니다. 모든 것이 잘되긴하지만 테스트 데이터베이스에 접근 할 수 없다는 문제가 있다면 소켓 스펙을 제거해보십시오.