Как указать расположение файла sock MySQL для Thinking Sphinx?

Мой файл сокета находится здесь:

/var/run/mysqld/mysqld.sock

Когда я делаю:

rake thinking_sphinx:start

Я получил:

rake aborted!
Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)

Я хочу сообщить think_sphinx, где находится мой файл сокета. Как это возможно? Эта проблема появилась после жесткой перезагрузки моего слайса на Slicehost.


person Tony    schedule 07.09.2009    source источник


Ответы (4)


EDITED, чтобы быть (надеюсь) яснее:

вы можете указать сокет mysql, который будет использоваться в файле конфигурации поиска sphinx, sphinx.conf через sql_sock:

sql_sock = /var/run/mysqld/mysqld.sock

(обратите внимание, что от параметра sql_host зависит, будет ли это значение реально использовать)

вы также можете использовать файл конфигурации Think_sphinx, RAILS_ROOT/config/sphinx.yml, чтобы установить (перезаписать) эти значения:

sql_sock: /var/run/mysqld/mysqld.sock
person ax.    schedule 08.09.2009
comment
я не очень понимаю твой ответ - person Tony; 08.09.2009

В версии 1.3.20 путь к сокету может быть определен через database.yml, например

# database.yml
development:
  adapter: mysql
  database: app_name_development
  username: root
  password: 
  socket: /tmp/mysql.sock

Теперь thinking-sphinx будет использовать путь сокета => /tmp/mysql.sock.

person jpemberthy    schedule 10.11.2010

Некоторый интересный фрагмент кода из пограничного сфинкса, в котором говорится, что сфинксу требуются TCP-соединения.

Из think_sphinx/configuration.rb:

def connection
# If you use localhost, MySQL insists on a socket connection, but Sphinx
# requires a TCP connection. Using 127.0.0.1 fixes that.
address = searchd.address || '127.0.0.1'
address = '127.0.0.1' if address == 'localhost'

Mysql2::Client.new(
  :host  => address,
  :port  => searchd.mysql41,
  :flags => Mysql2::Client::MULTI_STATEMENTS
)
end
person James Boutcher    schedule 08.08.2012

Ответ от топора не работает.

Из коммита 49f467b25075666104a46b190139dd1bdbb1452f видно, что кто-то добавил поддержку в SphinxHelper для установки сокета. Я не использовал этот метод, и у меня нет слишком много времени, чтобы проверить его для вас, так что вы сами с этим методом.

Также, что любопытно, в коммите http://github.com/freelancing-god/thinking-sphinx/commit/a12dbd55ed9046faf6369a3d0aa452b75a31b5b6 похоже, что они добавили поддержку сокетов через ваш database.yml, однако, если вы посмотрите на текущий код Edge, кажется, что это было удалено?

Краткий ответ: символическая ссылка вашего фактического mysqld.sock на место, где его ищет sphinx.

person user201254    schedule 02.11.2009