Rails 3.1.0.rc4 + Postgres - не может читать или писать в базу данных после перезагрузки - PullRequest
4 голосов
/ 14 июля 2011

Я только начал писать приложение, используя последнюю версию Rails и PostgreSQL.Я создал базу данных, добавил необходимый гем, настроил файл database.yml и начал работать с двумя моделями - User (эта использовала Devise для аутентификации) и Group.Я создал дополнительный контроллер для стартовой страницы (простой - только для отображения списка ссылок).Все выглядело хорошо, я мог добавлять данные испытаний в базу данных - пока я не вернулся сегодня утром и не хотел продолжать работу.

Пока я оставался на домашней странице, все выглядело так же, как вчера.Но когда я попытался получить доступ к списку групп, я получил следующую ошибку:

Routing Error

You have a nil object when you didn't expect it!
You might have expected an instance of Array.
The error occurred while evaluating nil.map

На странице не было никакой дополнительной информации, поэтому я заглянул в консоль Webrick и увидел следующее:

ActionController::RoutingError (You have a nil object when you didn't expect it!
You might have expected an instance of Array.
The error occurred while evaluating nil.map):
app/controllers/groups_controller.rb:1:in `<top (required)>'

Первая строка моего контроллера, как обычно:

class GroupsController < ApplicationController

Я посмотрел на другие действия, и результат был таким же: неожиданный нулевой объект.Та же проблема возникла при попытке выполнить какое-либо действие для пользователя.

Я подозревал, что это проблема с базой данных (потому что она не затрагивала контроллер, который вообще не использовал базу данных), поэтому я пошел к консоли railsпосмотрим, смогу ли я добавить записи вручную.Я не смог.

ruby-1.9.2-p180 > group = Group.new
(some SQL)
NoMethodError: You have a nil object when you didn't expect it!
You might have expected an instance of Array.
The error occurred while evaluating nil.map
  from /home/lite/.rvm/gems/ruby-1.9.2-p180/gems/activerecord-3.1.0.rc4/lib/active_record/persistence.rb:320:in `attributes_from_column_definition'
  from /home/lite/.rvm/gems/ruby-1.9.2-p180/gems/activerecord-3.1.0.rc4/lib/active_record/locking/optimistic.rb:69:in `attributes_from_column_definition'
  from /home/lite/.rvm/gems/ruby-1.9.2-p180/gems/activerecord-3.1.0.rc4/lib/active_record/base.rb:1525:in `initialize'
  from (irb):1:in `new'
  from (irb):1
  from /home/lite/.rvm/gems/ruby-1.9.2-p180/gems/railties-3.1.0.rc4/lib/rails/commands/console.rb:45:in `start'
  from /home/lite/.rvm/gems/ruby-1.9.2-p180/gems/railties-3.1.0.rc4/lib/rails/commands/console.rb:8:in `start'
  from /home/lite/.rvm/gems/ruby-1.9.2-p180/gems/railties-3.1.0.rc4/lib/rails/commands.rb:40:in `<top (required)>'
  from script/rails:6:in `require'
  from script/rails:6:in `<main>'

Я посмотрел самый верхний файл (persistence.rb) и искал строку 320.

319: def attributes_from_column_definition
320:  Hash[self.class.columns.map do |column|
321:    [column.name, column.default]
322:  end]
323: end

Это определение дало мне небольшое представление о том, что можетпроисходило, поэтому я запустил еще одну команду в консоли (Group.inspect) и получил ошибку в следующей строке:

attr_list = columns.map { |c| "#{c.name}: #{c.type}" } * ', '

Похоже, я не могу получить доступ к столбцам моей таблицыно я понятия не имею почему.Я вошел в систему как тот же пользователь, на той же машине, используя ту же операционную систему и ядро.Из любопытства я создал другое приложение, и после перезагрузки оно тоже не работало.

Я провел четыре часа в поисках ответа, но не смог найти ничего связанного.Что может быть причиной этой проблемы и как ее исправить?

Ответы [ 2 ]

1 голос
/ 15 июля 2011

Я нашел виновного: маленький драгоценный камень с именем «automatic_foreign_key», который я использовал для автоматического обнаружения внешних ключей.Когда я откатил сделанные изменения, удалил их и изменил таблицу вручную, у меня снова работало приложение.

Спасибо всем за помощь!

0 голосов
/ 14 июля 2011

Может быть Группа - это зарезервированное слово в этой версии postgresql или rails.rails-3.1.0-rc4 - самая свежая версия rails.Создайте еще одну мертвую просто модель, чтобы проверить ее.

...