Grover.to_pdf: ReadableStream не определен

У меня есть приложение Rails, которое использует драгоценный камень Grover Ruby, и оно прекрасно конвертирует HTML в изображения, но когда я пытаюсь преобразовать его в PDF, как показано ниже, я получаю сообщение об ошибке, сообщающее, что ReadableStream не определен.

html = ExportController
        .new
        .render_to_string({
                            template: '/export/index',
                            layout: 'pdf'
                          })
pdf = Grover.new(html).to_pdf
send_data pdf, filename: 'export', type: 'application/pdf'

Я подозревал, что это как-то связано с зависимостями, но все версии были правильными и не имели конфликтов. Я проверил проблемы на GitHub и не нашел ничего, что соответствовало бы этой проблеме, так что я думаю, что это что-то с моей стороны, но я не могу это точно определить.

Поиск в Google «ReadableStream не определен» выявил множество ошибок Node/JS, а не Ruby. Гровер использует Puppeteer под капотом, который использует JS для управления всем. Возможно, убедитесь, что ваша установка puppeteer обновлена, а также, возможно, nodejs.

Unixmonkey 13.03.2024 17:12

Это было первое, что я попробовал (см. нижний абзац).

Marius Kressin 15.03.2024 01:45
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
2
2
386
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

У меня была такая же проблема здесь, в производстве, на AWS EC2. Проблема была решена путем понижения версии пакета до версии 21.11.0.

yarn remove puppeteer

yarn add [email protected]

Такая же проблема локально. Я манипулировал использованием Гровером процессора.cjs, чтобы показать локальную версию узла, и он работал на v16. По умолчанию на моем компьютере установлена ​​версия v20, но PATH, предоставленный Гроверу, не включал версию моего узла. Сначала я попробовал добавить "engines": { "node": "20.x" } к package.json на Гровере и собрать драгоценный камень локально, но это тоже не сработало. Наконец, я создал файл config/initializers/grover.rb со следующим:

# frozen_string_literal: true
Grover.configure do |config|
  config.node_env_vars = {
    "PATH" => "~/.nvm/versions/node/v20.3.1/bin:#{ENV['PATH']}"
  }
end

Это кажется хрупким способом решения проблемы, но он сработал. Хотелось бы услышать о более постоянном решении.

Другие вопросы по теме