-Fatal- не успя да разпредели памет - Rails 3.1 и Mysql2 Gem

Имам странен проблем с най-новия gem 'mysql2' и Rails 3.1. Мога да стартирам mysql добре от IRB, когато включа gem, но с rails, когато се опитам да запазя в базата данни в конзолата или дори да заредя страницата, когато сървърът стартира, получавам [FATAL] Failure to Allocate Memory.

Изглежда, че няма налични регистрационни файлове на mysql и това е единствената грешка, която Rails показва. Интересното е, че когато стартирам връзка в конзолата на Rails и просто стартирам заявка за преброяване, напр. User.count, работи добре, но когато се опитам да изляза от конзолата, увисва за неопределено време. Всичкият човек, с когото се сдвоявам, използва една и съща кодова база и структура на база данни и няма проблеми ...

Някой друг да е имал подобен проблем? Опитах да деинсталирам и преинсталирам homebrew и mysql вчера и все още се случва.


person redroot    schedule 07.09.2011    source източник
comment
коя версия на ruby ​​(с patchlevel) използвате?   -  person Anatoly    schedule 07.09.2011
comment
Имам същия проблем с Rails 3.0.7 и mysql2: stackoverflow.com/questions/7490968/   -  person Mirko    schedule 21.09.2011
comment
Използвате ли и Lion?   -  person Mirko    schedule 21.09.2011
comment
някаква проверка на ruby ​​версията? 3.1 беше голяма промяна. Например 1.8.7 не работи с него и получавате „грешка при сегментиране“(!) на Ubuntu. 1.9.2 поправи това.   -  person Michael Durrant    schedule 27.09.2011


Отговори (5)


Ако сте на OS X Lion с инсталиран mysql с homebrew, можете да опитате с https://stackoverflow.com/a/9555979/1248228

person nolith    schedule 10.03.2012

Получих и това

[FATAL] не успя да задели памет

грешка и поправката беше да деинсталирам mysql-connector-c, който имах в моите формули за варене.

brew uninstall mysql-connector-c
person H6.    schedule 19.04.2013

Мисля, че това може да е свързано с вашата машина и/или 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
person providence    schedule 02.10.2011

Имах същия проблем на 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).

person litso    schedule 26.01.2012

Имах същия проблем. Най-вероятно лоша практика, но имах цикъл while в моя haml изглед и бях забравил да инициализирам брояча и да увелича брояча в рамките на цикъла.

- while (i < 10) do
   = i

инициализирането на брояча и увеличаването му реши проблема.

- i = 0
- while (i < 10) do
  = i
  - i += 1
person bhakku    schedule 16.10.2013