Получение случайной ошибки nil.each в mysql2 gem при использовании: include в поиске Rails - PullRequest
0 голосов
/ 10 марта 2011

Я случайно (как кажется) получаю ошибку nil.each на моем локальном хосте. Чувствовал себя довольно уверенно в коде, поэтому я подтолкнул его к героку, и он прекрасно работает там.

Вот мой код просмотра:

<h2><%=@book.name.upcase%></h2>

<br />

<% @book.chapters.each do |chapter| %>
    <h3>Chapter <%=chapter.number%></h3>
    <% chapter.verses.each do |verse| %>
        <b><%=verse.number%>)</b> <%=verse.body%>
    <% end %>
    <br /><br />
<% end %>

Сначала все, что у меня было в контроллере, было что-то вроде @book = Book.find(params[:id]), и это работало нормально, за исключением скорости. Затем я изменился на это:

def show
    if params[:book_name]
        #@book = Book.find_by_sql(["select * from books where UPPER(name) = UPPER(?)", params[:book_name]]).first
        @book = Book.where(["UPPER(name) = UPPER(?)", params[:book_name]]).includes(:chapters => :verses).first
        raise ActiveRecord::RecordNotFound, "Page not found" if @book.nil?
    elsif params[:id]
        @book = Book.find(params[:id].to_i, :include => {:chapters => :verses})
    end
end

Теперь я случайно получаю эту ошибку:

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.each
...
app/controllers/books_controller.rb:14:in `show'

Разница лишь в том, что heroku использует postgre, а я использую mysql.
URL Heroku: http://kjv -on-rails.heroku.com / books / 1
Полный код заявки: https://github.com/tybro0103/KJV-on-Rails

Обновление Я только что проверил Full Trace и понял, что здесь происходит ошибка:

mysql2 (0.2.6) Библиотека / active_record / connection_adapters / mysql2_adapter.rb: 635: в `select '

Итак, ошибка происходит в самоцвете mysql2.

Примечание Мне стало известно, что у меня странные / избыточные отношения и данные. Я понимаю это, я обещаю! Я не верю, что это вызывает ошибку, хотя. :)

Примечание Случайно вот что я имею в виду ... В некоторых книгах я никогда не вижу этой ошибки. В других я вижу 90% времени, в то время как в других я вижу это 50% времени. Я просто нажимаю «Обновить» снова и снова, и иногда это работает, а иногда нет. Я думаю, что единственный способ действительно понять, что я имею в виду, это загрузить код самостоятельно. Я думаю, никто не хочет, а это значит, что я начну вознаграждение через пару дней в качестве стимула. :)

UPDATE
Так что ошибка происходит в адаптере mysql2. Самое смешное, что @book = Book.find(params[:id].to_i, :include => {:chapters => :verses}) вызывает ошибку при запуске сервера rails. В консоли rails я могу запускать одну и ту же команду весь день, и она отлично работает. Он использовал webrick, но я попытался переключиться на mongrel и получил ту же ошибку. Я также попытался перейти с ruby ​​1.8.7 на 1.9.2 и получить ту же ошибку. Кажется, может быть, есть какой-то предел памяти на сервере rails, может быть?

1 Ответ

0 голосов
/ 17 марта 2011

Ааааа ... Я нашла источник проблем!Я просто понизил MySQL с 5,5 до 5,1 ... проблема ушла!Какая боль в @ $$ это было.

Однако было бы неплохо иметь возможность использовать последнюю версию mysql.Если кто-то сможет найти способ заставить его работать, используя mysql 5.5, я отмечу это как принятый ответ.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...