Mac OSX Lion и Ruby - [FATAL] не удалось выделить память

У меня есть серьезная проблема с Ruby и OSX Lion - всякий раз, когда я пытаюсь запустить Rails или даже инструмент rake, я получаю эту ошибку:

[FATAL] failed to allocate memory

Я попытался перекомпилировать ruby ​​в разных версиях (1.9.2-p180, 1.9.2-p290, 1.9.2-head), и он всегда один и тот же.

Однако я заметил, что я могу удалить некоторые драгоценные камни, а затем инструмент "грабли" будет работать, и только "рельсы s" умрут с этой ошибкой. Кажется, на самом деле недостаточно памяти для этого количества драгоценных камней, которые я использую, но опять же это кажется очень странным - он отлично работает на Snow Leopard и даже в моей компании на mac mini с Lion - единственное различие заключается в том, что mini обновлен Snow Leopard → Lion, а на моем iMac - чистая установка Lion.

Любые идеи? Есть ли какая-либо настройка для увеличения памяти на OSX/Lion?

Ответ 1

Мне потребовалось некоторое время, чтобы понять это, но вот решение:

Эта проблема была вызвана камнем mysql2, когда я переключился на ruby-mysql, все это снова заработало (не забудьте изменить адаптер от mysql2 до mysql в database.yml!)

Итак, я начал думать о различиях между mac mini и iMac. В основном мини работает Lion, обновленный от Snow Leopard, который обновлен Leopard, и у него есть хорошие старые Mac-порты для серверов mysql и pgsql. Поэтому, когда gem скомпилирован с использованием библиотек портов.

С другой стороны, iMac со свежей установкой Lion имеет пакет Zend Server (двоичные файлы apache + php + mysql) и пакет "mysql-connector-c" в стиле Homebrew, в котором есть библиотеки, необходимые для компиляции драгоценных камней.

В целом, похоже, что версия mysql для портов работает правильно, в то время как коннектор Homewbrew не выполняет (его утечка некоторой памяти?).

Надеюсь, что это поможет.

Ответ 2

Я удалил mysql2

$ gem uninstall mysql2

И переустановить через bundler

$ bundle

И я снова могу rails s

Ответ 3

У меня был конфликтный пакет mysql-connector-c из homebrew. mysql2 использовал dylib из этого пакета, а не из mysql install. Удаление пакета homebrew дало еще одну проблему, которую можно было бы решить, добавив

export DYLD_LIBRARY_PATH="$DYLD_LIBRARY_PATH:/usr/local/mysql/lib/"

в мою среду.