Распечатать css (с переменными) в файл - PullRequest
0 голосов
/ 08 мая 2018

У меня есть сервис, который генерирует epubs, поэтому мне нужно сгенерировать файл css для встраивания в epub.

Я создал представление css в epub/style.css.erb, но логика в сервисе ине в контроллере, кажется нет возможности позвонить render_to_string.На самом деле, сервис заключен в задание sidekiq, которое также может вызываться из after_update из модели, так что это является дальнейшим препятствием для render_to_string.

Я мог бысоздать как EpubController и вызвать метод render_to_string оттуда.Но из моего сервиса, расположенного в app/services/epub_export.rb, как я могу отправить параметры на / получить выходные данные от контроллера?Таким образом, он пахнет, как если бы я сломал схему MVC.

Но мне также не нравится классический способ, например

File.open(@css_path, 'w') do |f|
  f.puts "@charset utf-8;"
  f.puts "/* Styles for GEPUB Sample Book */"
  f.puts "h1"
  f.puts "{"
  f.puts "  text-align: center;"
  f.puts "  color: #0000ff;"
  f.puts "  font-weight: normal;"
  f.puts "  font-family: #{@font_family};"
  f.puts "}"
end

Или есть альтернатива этому?

1 Ответ

0 голосов
/ 09 мая 2018

Я все время использую render_to_string в асинхронном задании вне контроллера для генерации pdf. Это выглядит примерно так:

class FooService

  ...

  def pdf
    ActionController::Base.new.render_to_string(
      pdf:        "pdf_name", 
      template:   'path/to/template',
      locals:     {presenter: self},
      page_size:  'Letter',
      encoding:   "UTF-8",
      margin: {
        top: 20,
        bottom: 20
      }
    )
  end

  ...

end

Вы пробовали что-то подобное?

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