tail -100 log/production.log

и видим:

Errno::EACCES (Permission denied – /var/www/../public/video/media): /usr/lib/ruby/1.8/fileutils.rb:243:in `mkdir’ /usr/lib/ruby/1.8/fileutils.rb:243:in `fu_mkdir’ /usr/lib/ruby/1.8/fileutils.rb:217:in `mkpath’ /usr/lib/ruby/1.8/fileutils.rb:215:in `mkpath’ /usr/lib/ruby/1.8/fileutils.rb:201:in `mkpath’ /vendor/plugins/file_column/lib/file_column.rb:30:in `init_options’ /vendor/plugins/file_column/lib/file_column.rb:28:in `init_options’ /vendor/plugins/file_column/lib/file_column.rb:622:in `file_column’ /app/models/post.rb:48

Ну все ясно. Сами писать можем, а апач — нет. chmod g+w -R shared
Перезагружаем страничку, ага. Могила все таки горбатого немного поправила. См. приложение №2. Лезем в тот же журнальный файл и видим там ту же хрень:

file /var/www/…/tmp/sessions//ruby_sess.0eaefc7f49f86725 not readable /usr/lib/ruby/1.8/pstore.rb:95:in `initialize’ /usr/lib/ruby/1.8/cgi/session/pstore.rb:70:in `initialize’ /usr/lib/ruby/1.8/cgi/session.rb:273:in `initialize’

Это могло произойти, например, из-за того, что запускали в этом каталоге вебрик. Сотрем эту сессию от греха подальше. Да, и не забудем внести в Capistrano нужный таск, что бы временный каталог делал записываемым для веб-сервера.

Перезагружаем сайт, видим приложение №1. Что в этот раз?

ActionView::TemplateError (undefined method `media?’ for nil:NilClass) on line #4 of app/views/posts/_latest.rhtml: …. пропущены строки с шаблоном #{RAILS_ROOT}/app/helpers/application_helper.rb:45:in `flash_player_for’ #{RAILS_ROOT}/app/views/posts/latest.rhtml:4:in `run_rhtml_posts__latest’

Ага! А строчкой №45 идет:

return "" unless post.media?

Это означает что? Тестов мало было — вот что! А точнее, то, что мы не проверяли приложение при отсутствии данных. Править эту ошибку стоит, но не хочется. Ситуации, что не будет данных не будет. Поэтому запускаем консоль и добавляем сами нужную запись:

>cd current >./script/console production >> Video.create :name => “First video record!” Errno::ENOENT: No such file or directory – /tmp/mysql.sock

О! Вот это новость. Ну конечно. Делали то приложение на Макоси, где обычно в /tmp/mysql.sock живет сокет, а разворачиваем на Дебиане. Вперед, правим database.yml. Не забываем его поправить прежде всего в репозитории (заодно разруливая ситуацию с тем, что в девелопмент окружении ходим под рутом, а на хостинге под другим пользователем)!

Все правим и понимаем, что rake migrate сделать забыли. Бестолочь!

RAILS_ENV=production rake migrate

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

ActionView::TemplateError (undefined method `media?’ for nil:NilClass) on line #4 of app/views/posts/_latest.rhtml: …. пропущены строки с шаблоном #{RAILS_ROOT}/app/helpers/application_helper.rb:45:in `flash_player_for’ #{RAILS_ROOT}/app/views/posts/latest.rhtml:4:in `run_rhtml_posts__latest’

Ах ты, тварь! Классы то закешированы, а прибить обработчик забыли. Не надо забывать. Прибиваем и любуемся запустившимся сайтом.

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

Вот так. Резюмируя: если после деплоя что-то не завелось, первым делом смотрим на права и на настройки БД.

Sidebar