Ruby on Rails — завершена внутренняя ошибка 500 на f.label

ИЗМЕНИТЬ

Вот проект на GitHub: https://github.com/lionelrudaz/myteam2


Я делаю свое первое приложение на Ruby on Rails, используя шаблон Railsapp (Twitter Bootstrap, Devise и CanCan).

Я также сделал необходимые шаги, чтобы опубликовать свое приложение на Heroku.

Пока все шло нормально, первая публикация на Heroku была в порядке, пока я не перезапустил сервер на своем MacBook Pro.

Теперь я всегда получаю страницу ошибки по умолчанию с сообщением «Извините, но что-то пошло не так».

В терминале получаю:

=> Booting Thin
=> Rails 3.2.8 application starting in development on http://0.0.0.0:3000
=> Call with -d to detach
=> Ctrl-C to shutdown server
>> Thin web server (v1.5.0 codename Knife)
>> Maximum connections set to 1024
>> Listening on 0.0.0.0:3000, CTRL+C to stop


Started GET "/" for 127.0.0.1 at 2012-10-01 19:19:21 +0200
Processing by HomeController#index as HTML
     User Load (0.3ms)  SELECT "users".* FROM "users" 
     Club Load (0.2ms)  SELECT "clubs".* FROM "clubs" ORDER BY "clubs"."id" DESC LIMIT 1
Rendered home/index.html.erb within layouts/application (23.2ms)
Completed 500 Internal Server Error in 190ms

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

Вот мой файл home_controller.rb

class HomeController < ApplicationController
  def index
    @users = User.all
    @club = Club.last
  end
end

index.html.erb

<h3>Home</h3>

<%= debug @club %>

<%= form_for @club do |f| %>

  <div class="control-group">
    <%= RUBY_VERSION %>
    <%= Rails.version %>
    <%= f.label :name, :name %>
    <%= f.text_field :name %>
  </div>

 <% end %>

 <% @users.each do |user| %>
    <p>User: <%=link_to user.name, user %></p>
 <% end %>

Ошибка вылетает при изменении

 <%= f.label :name, :name %>

to

 <%= f.label :name %>

Я обновил свое приложение на Heroku, чтобы вы могли проверить отладку: http://myteam2.herokuapp.com/

Я не знаю, что не так, это так просто, что я чувствую себя таким тупым.

Когда я проводил расследование, я заметил, что вторым аргументом f.label должна быть строка. Невозможно использовать метод t() для изменения текста электронного письма из файла i18n.

Я не могу подать заявку и чувствую себя очень расстроенным. Мои поиски в Google не увенчались успехом.

Дайте мне знать, если вам нужна дополнительная информация.

Ваше здоровье,


person Lionel Rudaz    schedule 01.10.2012    source источник
comment
Если вы запускаете сервер локально в режиме разработки, вы должны получить страницу ошибки с трассировкой. Если вы используете режим разработки, возможно, опубликуйте содержимое вашего файла config/development.rb (удалив любую конфиденциальную информацию).   -  person Wizard of Ogz    schedule 02.10.2012
comment
Здравствуйте, дорогой Wizard of Ogz, спасибо за ваш ответ. Вот файл: github.com/lionelrudaz/myteam2/blob/ master/config/environments/. Надеюсь это поможет. Ваше здоровье,   -  person Lionel Rudaz    schedule 02.10.2012


Ответы (2)


Лайонел, вы должны увидеть сообщение об ошибке, когда запускаете свой проект локально в среде разработки.

Я клонировал ваш проект и после небольшой настройки запустил rails s, чтобы запустить проект со средой разработки по умолчанию. Домашняя страница загрузилась нормально, но нажатие кнопки «Войти» для перехода к /users/sign_in показало следующую ошибку:

Ошибка:

http://www.evernote.com/shard/s157/sh/078d0a12-73b1-4eb7-9430-55b916f19ef7/12c0cbb7b7254e5c02bb7ff0f0c4aa3f

Ошибка указывает на то, что в config/locales/users.en.yml существует проблема, что ожидался хеш, но ничего не было возвращено.

В настоящее время config/locales/users.en.yml является пустым файлом.

Исправить:

Вы можете либо удалить этот файл. Сделайте это, если вы никогда не планируете использовать его.

OR

добавить содержимое, чтобы анализ файла возвращал данные в виде хэша. Просто добавьте en: в начало config/locales/users.en.yml. Сделайте это, если вы планируете вводить данные перевода в будущем.

Другой:

Похоже, вы разрабатываете свое приложение на Heroku. По моему опыту это будет сложно. Гораздо проще разрабатывать локально, добавляя функции и исправляя ошибки. Затем выполните развертывание в Heroku, как только ваше приложение будет в стабильном состоянии. Вы даже можете настроить отдельный промежуточный сервер на Heroku, чтобы протестировать свои изменения перед развертыванием на рабочем сервере.

Используя гем heroku, вы можете запустить heroku logs --tail для мониторинга вывода вашего приложения. Если вы не использовали это, возможно, это помогло решить вашу проблему.

Удачи!

person Wizard of Ogz    schedule 02.10.2012
comment
Большое спасибо Wizard of Ogz! Я не могу проверить это прямо сейчас, но обязательно попробую, когда вернусь домой. Я знал, что это была глупая ошибка, это безумие! Быстрый вопрос: как я могу удалить это сообщение Извините, что-то пошло не так, скриншот и получить трассировку стека, как на скриншоте? заранее спасибо - person Lionel Rudaz; 02.10.2012
comment
@lionel Я думаю, может быть, вы локально запускаете свой сервер в производственном режиме. Какую команду вы используете для запуска сервера? rails s или rails s -e development должны запускаться в среде разработки, чтобы вы увидели обратную трассировку. - person Wizard of Ogz; 02.10.2012
comment
Спасибо, приятель, решение работает отлично! Но изменение способа запуска сервера не имеет никакого эффекта. Ничего, я наткнусь на решение. Ваше здоровье - person Lionel Rudaz; 02.10.2012
comment
@lionel убедитесь, что эта строка все еще находится в вашем config/environments/development.rb: config.consider_all_requests_local = true - person Wizard of Ogz; 02.10.2012
comment
Это здесь. Я выяснил, что в общей папке есть страница 500.html, которая вызывается, когда у меня возникает такая ошибка. Только не знаю, где отключить перенаправление на этот файл при ошибках. В конце концов я найду решение. Спасибо за вашу помощь Wizard, я высоко ценю. Ваше здоровье, - person Lionel Rudaz; 03.10.2012

Вы путаете использование ярлыка с конструктором форм и без него.

Когда вы используете label внутри form_tag, он принимает два параметра: первый — это имя параметра, необходимого для подключения метки к соответствующему текстовому полю, а второй — фактический текст метки.

Однако, когда вы используете form_for @whatever do |f|, первый параметр метки становится известен автоматически, так как вы выполняете f.label :name, а f знает, что такое имя и что будет генерировать f.text_field, и делает за вас всю гадость.

Это часто неясно в документации Rails, но, как правило, вы можете исключить первый параметр вспомогательных методов формы, когда вы делаете их из связанной модели, используя form_for.

person Tim Sullivan    schedule 01.10.2012
comment
Привет Тим, спасибо за ваш ответ. Я знаю, поэтому я не понимаю, почему ‹%= f.label :name %› не работает. Он работал нормально в течение нескольких недель, а потом, я не знаю почему, он больше не работает. Что я могу отправить вам, чтобы дать вам больше информации? - person Lionel Rudaz; 02.10.2012