-致命-分配内存失败- Rails 3.1和Mysql2 Gem



我对最新的'mysql2' gem和Rails 3.1有一个奇怪的问题,当我包括gem时,我可以从IRB运行mysql,但是每当我试图在控制台保存到数据库时,甚至在服务器启动时加载页面时,我都会得到[致命]分配内存失败

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

还有人有这样的问题吗?我尝试卸载和重新安装自制和mysql昨天,它仍然发生。

如果你在OS X Lion上安装了mysql,你可以试试https://stackoverflow.com/a/9555979/1248228

我也得到了这个

[FATAL]分配内存失败

错误,修复方法是卸载我的brew公式中的mysql-connector-c。

brew uninstall mysql-connector-c

我认为这可能与您的机器和/或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

我在OS X Lion上遇到了同样的问题,我相信这个问题与我的系统上的mysql安装和mysql2适配器有关。

我按照下面的说明安装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)连接来解决这个问题。

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

- while (i < 10) do
   = i

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

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

最新更新