1

所以,我有带有 MySQL 服务器的 Rails 应用程序。我安装了 Sphinx、Thinking Sphinx 和 MySQL2-gem。然后我开始为 Sphinx 搜索创建一个搜索表单:

<%= form_for(@posts) do |d| %>

到目前为止一切都很好。直到我收到一条错误消息(由于专门创建了该表单。我已经运行了我的 MySQL 服务器并且我的应用程序正在使用它。)

Can't connect to MySQL server on '127.0.0.1'

当然。这显然是一个端口问题,config/database.yml所以我将其从以下位置切换:

development:
...
...
host: localhost

至:

development:
...
...
host: 127.0.0.1

好吧,它显然现在找到了服务器,但抛出了一个错误:

Mysql2::Error
sphinxql: syntax error, unexpected ',', expecting $end near ',   @@SESSION.sql_auto_is_null = 0, @@SESSION.wait_timeout = 2147483, @@SESSION.sql_mode = 'STRICT_ALL_TABLES''

我真的不知道这意味着什么。

我检查了完整跟踪的第一行中指示的文件:

activerecord (4.0.0)     lib/active_record/connection_adapters/abstract_mysql_adapter.rb:284:in `query'
activerecord (4.0.0)   lib/active_record/connection_adapters/abstract_mysql_adapter.rb:284:in `execute'
activerecord (4.0.0) lib/active_record/connection_adapters/mysql2_adapter.rb:220:in `execute'
activerecord (4.0.0) lib/active_record/connection_adapters/abstract_mysql_adapter.rb:778:in    `configure_connection'
activerecord (4.0.0) lib/active_record/connection_adapters/mysql2_adapter.rb:265:in `configure_connection'
activerecord (4.0.0) lib/active_record/connection_adapters/mysql2_adapter.rb:38:in `initialize'
activerecord (4.0.0) lib/active_record/connection_adapters/mysql2_adapter.rb:20:in `new'
activerecord (4.0.0) lib/active_record/connection_adapters/mysql2_adapter.rb:20:in `mysql2_connection'

我检查了文件,它们甚至没有提到任何值。这让我很困惑。还要注意,这些文件至少有几个月的历史,并且直到现在都没有出现错误。

欢迎所有想法。我对 MySQL 甚至 Sphinx 都很陌生,所以我什至不知道从哪里开始。

4

2 回答 2

0

发生了一些奇怪的事情 - 你得到的错误来自 Sphinx,但堆栈跟踪来自 ActiveRecord,而不是 Thinking Sphinx。

您能否确认您没有将config/database.yml开发环境的端口设置为 9306,这是 Sphinx 的默认端口?

于 2013-10-06T05:44:33.547 回答
0

mysql2 显然在第一次连接到服务器时试图设置一堆会话变量(它显然希望它是一个 mysql 服务器,所以会理解那个查询)

Sphinx 不是 mysql 并且不理解许多 mysql 命令。

也许您可以使用 https://github.com/rails/rails/pull/8346 告诉 mysql2 不要尝试将所有这些无意义的变量发送到 sphinx 服务器。

于 2013-10-05T05:08:12.760 回答