Интуиция:
Это происходит потому, что запросы обрабатываются последовательно.
Допустим, у вас есть два запроса. Один для просмотра страницы А, а другой для просмотра страницы Б.
Однако запрос на просмотр страницы B не может быть выполнен до тех пор, пока просмотр страницы A не будет выполнен.
В вашем случае вы создали зависимость: страница A не может завершить отрисовку, пока не отобразится страница B. Однако страница B не будет отображаться до тех пор, пока не будут выполнены все предыдущие запросы (в данном случае запрос на отображение страницы A).
Короче говоря, выполнение запроса на чтение зависит от запрошенной загрузки страницы.
Что здесь происходит:
Ваш запрос на визуализацию JSON не может быть завершен до тех пор, пока исходный запрос не будет завершен, поэтому процесс зависает.
В конце концов, он ждет слишком долго и просто истекает.
Это происходит потому, что в отличие от других языков (например, Javascript), запросы Ruby блокируются при выполнении в одном потоке (т.е. синхронном, а не асинхронном).
Решение:
Обратите внимание, что если вы запускаете несколько процессов или потоков, это сработает. См. этот ответ SO..
Однако вместо порождения потоков вы можете просто визуализировать файл непосредственно в строку с помощью метода render_to_string
в Rails.
Удачи.
person
Yuval Karmi
schedule
05.04.2016