5

我在使用最新的“mysql2”gem 和 Rails 3.1 时遇到了一个奇怪的问题,当我包含 gem 时,我可以从 IRB 很好地运行 mysql,但是每当我尝试在控制台中保存到数据库时使用 rails,甚至加载服务器启动时的页面,我得到[FATAL] Failure to Allocate Memory

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

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

4

5 回答 5

1

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

于 2012-03-10T18:15:01.940 回答
1

我也得到了这个

[致命] 分配内存失败

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

brew uninstall mysql-connector-c
于 2013-04-19T09:19:37.133 回答
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
于 2011-10-02T18:49:57.247 回答
0

我在 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)。

于 2012-01-26T19:23:14.697 回答
0

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

- while (i < 10) do
   = i

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

- i = 0
- while (i < 10) do
  = i
  - i += 1
于 2013-10-16T04:02:42.957 回答