-Fatal-无法分配内存 - Rails 3.1和Mysql2 Gem

时间:2011-09-07 10:27:39

标签: ruby-on-rails ruby ruby-on-rails-3 mysql2

我遇到了一个奇怪的问题,最新的'mysql2'宝石和Rails 3.1当我包含gem时,我可以从IRB运行mysql,但是当我尝试在控制台中保存到数据库时使用rails,或者甚至在服务器启动时加载页面,我得到 [致命]无法分配内存

似乎没有任何可用的mysql日志,这是Rails显示的唯一错误。有趣的是,当我在Rails控制台中启动连接并运行计数查询时,例如User.count,它工作正常,但当我尝试退出控制台时,无限期挂起。我正在配对的所有人都使用相同的代码库和数据库结构并且没有问题......

其他人有这种问题吗?我昨天尝试卸载并重新安装自制程序和mysql,但它仍然会发生。

5 个答案:

答案 0 :(得分:1)

如果您使用自制的mysql安装了OS X Lion,可以试试https://stackoverflow.com/a/9555979/1248228

答案 1 :(得分:1)

我也得到了这个

  

[致命]无法分配内存

错误,解决方法是卸载我在brew公式中使用的mysql-connector-c。

brew uninstall mysql-connector-c

答案 2 :(得分:0)

我认为这可能与你的机器和/或MySQL配置而不是ruby有关。检查允许MySQL保留多少内存。这些参数应位于数据库的初始化或启动文件中。不幸的是,我不确切知道在哪里用MySQL查找这些文件。

我和Postgres有过类似的错误,因为我在配置文件中输了一个错字。在Postgres中,您要查找的文件看起来像这样。它不应该与MySQL太不相同:

#------------------------------------------------------------------------------
# RESOURCE USAGE (except WAL)
#------------------------------------------------------------------------------

# - Memory -

!!!THIS is the field you want to change!!!
shared_buffers = 28MB                   # min 128kB, default 28
                                        # (change requires restart)

#temp_buffers = 8MB                     # min 800kB
#max_prepared_transactions = 0          # zero disables the feature
                                        # (change requires restart)


# Note:  Increasing max_prepared_transactions costs ~600 bytes of shared memory
# per transaction slot, plus lock space (see max_locks_per_transaction).
# It is not advisable to set max_prepared_transactions nonzero unless you
# actively intend to use prepared transactions.
#work_mem = 1MB                         # min 64kB
#maintenance_work_mem = 16MB            # min 1MB
#max_stack_depth = 2MB                  # min 100kB

答案 3 :(得分:0)

我在OS X Lion上遇到了同样的问题,我认为问题与我的系统和mysql2适配器上的mysql安装有某种关系。

我按照these说明安装了mysql - 在我的机器上安装了mysql 5.5.15。

使用ruby 1.9.2和rails 3.1.3,我得到以下错误:

mysql2/client.rb:44:in `connect': Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2) (Mysql2::Error)

我通过将config/database.yml更改为通过localhost(主机:127.0.0.1)进行连接,从而解决了这个问题。

答案 4 :(得分:0)

我遇到了同样的问题。很可能是一个不好的做法,但我在haml视图中有一个while循环,我忘记初始化计数器并在循环内增加计数器。

- while (i < 10) do
   = i

初始化计数器并增加它解决了问题。

- i = 0
- while (i < 10) do
  = i
  - i += 1