hummingbird
@hummingbird

Как исправить проблемы в production версии RoR проекта?

Здравствуйте!

Разрабатывал проект в development версии (а именно возился с CanCanCan) и на минутку стало интересно, а как выглядят ошибки доступа в production версии. Дело до этого так и не дошло...

Проект запустился без проблем, но на сайте висело это:
f4f1f5cfd16a4112810fe035e4bcc966.png

Это из-за этого кода:
<% if current_user.has_role? :admin %>
    Есть доступ админа
<% else %>
    Нет доступа админа
<% end %>


Вырезка из лога:
ActionView::Template::Error (undefined method `has_role?' for nil:NilClass):
2:
3: <%= notice %>
4:
5: <% if current_user.has_role? :admin %>
6: Есть доступ админа
7: <% else %>
8: Нет доступа админа
app/views/home/index.html.erb:5:in `_app_views_home_index_html_erb___2839417483853351120_70310855782180'


Я не понимаю почему так, ведь все делал по официальной документации... Ладно, на время удалил этот кусок кода.

Перезапустил проект. Но теперь очередная беда:
9ac48fa26d1c44f6aa2411784466e118.png

Это про файлы:
site.ru/stylesheets/home.css
site.ru/javascripts/application.js

В слое в head есть это:
<%= stylesheet_link_tag    'home', media: 'all', 'data-turbolinks-track' => true %>
<%= javascript_include_tag 'application', 'data-turbolinks-track' => true %>


Такого в development версии не было. Я даже не понимаю что за css и почему он его пытается откуда то взять. Вроде всегда sass файлы цеплял.

Короче. Это две большие проблемы, которые теперь меня очень сильно волнуют и отвлекают.
Помогите, пожалуйста, их справить.
  • Вопрос задан
  • 228 просмотров
Решения вопроса 2
@evgeniy_trebin
Ruby on Rails developer
Попробуй так
<% if user_signed_in? && current_user.has_role?(:admin) %>
    Есть доступ админа
<% else %>
    Нет доступа админа
<% end %>


или же в контроллере добавь
before_action :authenticate_user!
Ответ написан
hummingbird
@hummingbird Автор вопроса
Окей. Вторая проблема связана с компиляцией.

В файле /config/environments/production.rb найдите опцию:
config.assets.compile
И зимените ее значение на true. После сайт тяжело перекомпилит все стили, скрипты и прочее. Сайт снова отобразится как надо.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
mbeloshitsky
@mbeloshitsky
Вебдев, систем оперейшонс, ж.д. автоматика
Добавлю, что еще есть способ заставить продакшн версию на время начать вести себя как debug'овую (выдавать ошибки со стектрейсом и т.п.) - в config/environments/production.rb инвертировать значения флажка

# Full error reports are disabled and caching is turned on.
  config.consider_all_requests_local       = false


Главное не забыть потом вернуть все обратно.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы