I installed sphinx a couple of months back for a postgres project and now I have a project that uses mysql. I tried to remedy this with this line in my environments.rb:
ThinkingSphinx.database_adapter = :mysql
and I even generated a development.sphinx.conf for this project:
source article_core_0
{
type = mysql
sql_host = localhost
sql_user = ***
sql_pass = ***
sql_db = ***_development
sql_sock = /tmp/mysql.sock
sql_query_pre = UPDATE `articles` SET `delta` = 0 WHERE `delta` = 1
sql_query_pre = SET NAMES utf8
sql_query_pre = SET TIME_ZONE = '+0:00'
sql_query = SELECT SQL_NO_CACHE `articles`.`id` * 6 + 0 AS `id` , `articles`.`title` AS `title`, `articles`.`content` AS `content`, GROUP_CONCAT(DISTINCT IFNULL(`tags`.`tag`, '0') SEPARATOR ' ') AS `tag`, GROUP_CONCAT(DISTINCT IFNULL(`customer_categories`.`name`, '0') SEPARATOR ' ') AS `category`, CONCAT_WS(' ', `users`.`first_name`, `users`.`last_name`) AS `created_by_user_name`, `articles`.`id` AS `sphinx_internal_id`, 3448190970 AS `class_crc`, 0 AS `sphinx_deleted`, `articles`.`account_id` AS `account_id`, `articles`.`internal_only` AS `internal_only`, UNIX_TIMESTAMP(`articles`.`created_at`) AS `created_at`, UNIX_TIMESTAMP(`articles`.`updated_at`) AS `updated_at`, `articles`.`views` AS `views` FROM `articles` LEFT OUTER JOIN `articles_tags` ON `articles_tags`.`article_id` = `articles`.`id` LEFT OUTER JOIN `tags` ON `tags`.`id` = `articles_tags`.`tag_id` LEFT OUTER JOIN `articles_categories` ON `articles_categories`.`article_id` = `articles`.`id` LEFT OUTER JOIN `customer_categories` ON `customer_categories`.`id` = `articles_categories`.`customer_category_id` LEFT OUTER JOIN `users` ON `users`.`id` = `articles`.`created_by_id` WHERE (`articles`.`id` >= $start AND `articles`.`id` <= $end AND `articles`.`delta` = 0) GROUP BY `articles`.`id`, `articles`.`title`, `articles`.`content`, `users`.`first_name`, `users`.`last_name`, `articles`.`id`, `articles`.`account_id`, `articles`.`internal_only`, `articles`.`created_at`, `articles`.`updated_at`, `articles`.`views` ORDER BY NULL
sql_query_range = SELECT IFNULL(MIN(`id`), 1), IFNULL(MAX(`id`), 1) FROM `articles` WHERE `articles`.`delta` = 0
sql_attr_uint = sphinx_internal_id
sql_attr_uint = class_crc
sql_attr_uint = sphinx_deleted
sql_attr_uint = account_id
sql_attr_uint = views
sql_attr_bool = internal_only
sql_attr_timestamp = created_at
sql_attr_timestamp = updated_at
sql_query_info = SELECT * FROM `articles` WHERE `id` = (($id - 0) / 6)
}
problem is I keep getting this error:
Sphinx 0.9.9-rc2 (r1785)
Copyright (c) 2001-2009, Andrew Aksyonoff
using config file '/Users/eumir/rails_apps/hivemind/config/development.sphinx.conf'...
indexing index 'article_core'...
ERROR: source 'article_core_0': unknown type 'mysql'; skipping.
ERROR: index 'article_core': failed to configure some of the sources, will not index.
indexing index 'article_delta'...
ERROR: source 'article_delta_0': unknown type 'mysql'; skipping.
ERROR: index 'article_delta': failed to configure some of the sources, will not index.
distributed index 'article' can not be directly indexed; skipping.
indexing index 'contact_core'...
ERROR: source 'contact_core_0': unknown type 'mysql'; skipping.
Any help on this?
It looks like you’ve compiled Sphinx to just support PostgreSQL, not MySQL. So you’ll need to recompile and reinstall Sphinx. You won’t need to change anything in Thinking Sphinx, it’s just a matter of modifying your database.yml (which I’m guessing you’ve already done), and you should be fine.
Keep in mind that by default, Sphinx compiles for MySQL support only. I usually compile it for both MySQL and PostgreSQL, and my configure request from within the Sphinx source directory looks something like:
Hopefully that’s all that’s needed – unless you have MySQL set up in a non-standard location, then you may need to check other flags – run
./configure --helpto see the various options.