Для чего нужно объявление сокета в файле Ruby on Rails database.yml? - PullRequest
8 голосов
/ 06 января 2011

Какая польза от объявления сокета в config / database.yml?

Пример кода:

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

Мое приложение работает, независимо от того, прокомментирована эта строка или нет.Так для чего это нужно?По каким причинам я могу оставить это, прокомментировать или изменить его значение?

Ответы [ 4 ]

12 голосов
/ 06 января 2011

Когда две программы хотят общаться друг с другом по сети, одна программа может открыть TCP-соединение («сокет») с другой.Первая программа должна знать IP-адрес второго компьютера и порт, который прослушивает программа.

В Linux, когда две программы на одном компьютере хотят общаться друг с другом, они все равно могут открываться.до TCP-соединения.Но они также могут открыть соединение через «файл сокета».Linux делает API-интерфейс файла сокетов довольно похожим на API-интерфейс TCP, поэтому не составляет особого труда обновить программу, которая уже обменивается данными по сети через TCP, для поддержки связи через файлы сокетов.Файлы сокетов работают быстрее, чем TCP, но работают только тогда, когда обе программы находятся на одном компьютере.

5 голосов
/ 06 января 2011

MySQL имеет два метода связи с ним в unix-системах: tcp / ip и доменные сокеты. Указав сокет, Rails, точнее драйвер базы данных, будет использовать сокет вместо сетевого подключения. Это может быть быстрее использовать сокет, но YMMV.

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

0 голосов
/ 25 июня 2019

Отображает расположение файла для сокета UNIX:

mysqladmin version -u 'your user name' -p

результат:

mysqladmin  Ver 8.42 Distrib 5.7.26, for Linux on x86_64
Copyright (c) 2000, 2019, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Server version      5.7.26-0ubuntu0.19.04.1
Protocol version    10
Connection      Localhost via UNIX socket
UNIX socket     /var/run/mysqld/mysqld.sock
Uptime:         6 min 40 sec

Ваш пользователь должен иметь разрешения.

0 голосов
/ 26 января 2011

Я потратил впустую весь день из-за сокета, указанного в моем database.yml - спецификации базы данных для тестовой среды просто не были проанализированы. Поэтому, если у вас есть проблема с недоступностью вашей тестовой базы данных, хотя кажется, что с ней все в порядке, попробуйте удалить спецификацию сокета.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...