Доступ к объектам базы данных / модели во время прекомпиляции ресурсов - PullRequest
0 голосов
/ 08 октября 2019

Я пытаюсь развернуть приложение rails chat для Heroku, но мой javascript не может выполнить вызов базы данных во время прекомпиляции ресурса. Пуш не удается с «Прекомпиляция ресурсов не удалась».

По следу я нахожу

remote:        Caused by:
remote:        PG::UndefinedTable: ERROR:  relation "chatrooms" does not exist
remote:        LINE 1: SELECT "chatrooms".* FROM "chatrooms"

После некоторого исследования я обнаружил, что Chatroom.all.each - это то, чтовызывает проблемы.

Канал (на стороне клиента):

// my-app/app/assets/javascripts/channels/chatroom.js.erb

//Iterate through chatrooms
<% Chatroom.all.each do |chatroom| %>

  App['chatroom' + <%= chatroom.id %>] = App.cable.subscriptions.create({channel: "ChatroomChannel", room: <%= chatroom.id %>},{    

      received: function(data) {
          ...
      };

  });

<% end %>

Так что я не могу получить доступ к модели чата во время прекомпиляции. Что-то нужно добавить в мой файл production.rb ? Приложение отлично работает в моей локальной среде.

1 Ответ

0 голосов
/ 10 октября 2019

Кажется, что нет никакого доступа к базе данных, пока ресурсы прекомпилируются.

Я обошел ее, вместо этого сохранив идентификаторы чата в атрибутах данных HTML5 и используя jQuery для их итерации.

// my-app/app/assets/javascripts/channels/chatroom.js.erb

$(document).on('turbolinks:load', () => {

  //Iterate through chatrooms
  $('.message-container').each(function() {

    App[`chatroom${$(this).data('chatroom_id')}`] = App.cable.subscriptions.create({channel: "ChatroomChannel", room: String($(this).data('chatroom_id'))},{

      received: function(data) {
        ...
      }

    });
  });
})

Я открыт для других решений, хотя!

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