2010-11-16 37 views
6

Tôi muốn kết nối với máy chủ MySQL từ xa (với rake db:create), nhưng Rails luôn coi đó là địa phương. database.yml trong đó sử dụng các cấu hình sau:Sự cố khi kết nối với máy chủ MySQL từ xa bằng Rails

defaults: &defaults 
    encoding: unicode 
    adapter: mysql 
    username: <username> 
    password: ************* 
    port: 3306 
    host: <remote ip address> 

development: 
    <<: *defaults 
    database: <db name> 
test: &test 
    <<: *defaults 
    database: <db name> 
production: 
    <<: *defaults 
    database: <db name> 

Và luôn luôn nhận được lỗi này khi cố gắng bất cứ điều gì trên cơ sở dữ liệu:

ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2) 

Các cấu hình làm việc miễn là tôi sử dụng cơ sở dữ liệu địa phương (tức là không phần máy chủ/cổng). Kết nối với máy chủ MySQL từ xa hoạt động tốt với các chi tiết đã cho.

Bất kỳ ý tưởng nào về những gì đang xảy ra?

Chỉnh sửa: Sự cố chỉ xảy ra với rake:db:create, các tác vụ khác - Thông báo lỗi thực sự gây hiểu nhầm.

+0

bạn có thể dán toàn bộ database.yml không? và env bạn sử dụng? Tôi cho rằng bạn định nghĩa một cấu hình socket ở đâu đó. – shingara

+0

(xem chỉnh sửa, có vẻ là một thông báo lỗi sai lạ) –

+0

Kiểm tra cài đặt tường lửa/bộ định tuyến của bạn, có vẻ như bạn không có kết nối TCP hoặc cổng bị chặn. –

Trả lời

1

Bạn có thể cần bật máy chủ MySQL để chấp nhận yêu cầu từ xa (bằng cách liên kết với địa chỉ IP của máy chủ hoặc tất cả định dạng địa chỉ 0.0.0.0). Chỉnh sửa tập tin cấu hình MySQL my.cnf trên máy chủ từ xa. Trong Ubuntu, bạn có thể tìm thấy các tập tin trong /etc/mysql/my.cnf

Thay đổi giá trị của bind-address:

bind-address   = 0.0.0.0 
+0

Hoặc chỉ cần nhận xét ra ràng buộc địa chỉ. – mahemoff

+0

Bạn phải viết điều này. nhận xét sẽ không hoạt động vì sẽ xem xét chấp nhận kết nối chỉ từ máy chủ lưu trữ hiện tại. – Yeameen

0

Tôi tìm thấy điều tương tự. Tôi đã sử dụng này:

RAILS_ENV=production bundle exec rails console 

Và nó đã phàn nàn về việc không thể tìm /tmp/mysql.sock (đó là chỉ trong phần phát triển database.yml). Nếu tôi đã kiểm tra Rails.env từ bảng điều khiển, nó sẽ cho biết sản xuất một cách chính xác. Bản sửa lỗi đơn giản như:

RACK_ENV=production bundle exec rails console 
Các vấn đề liên quan