Действительно статичные страницы с Rails

Некоторые страницы в приложении должны быть доступны, даже если приложение не работает. Например, страницы для 50x ошибок. Самый простой способ сделать это - создать статические HTML-страницы, которые будут обслуживаться веб-сервером (например, apache на Nginx). Большинство этих страниц имеют общий макет с приложением. Итак, если мы изменим какую-то часть макета в приложении, мы должны вручную изменить все статические страницы.

Каков наилучший способ сохранить страницы рельсов в виде статических файлов и воссоздать их (автоматически или с помощью задачи rake) при тех же изменениях в проекте? Любой драгоценный камень для rails или генератора статических сайтов, который может повторно использовать макет и ресурсы rails (CSS, js, images).

2 ответа

Решение

Есть простая задача rake (через GIST), чтобы загрузить все файлы из VIEW_PATH, обернуть его макетом приложения и сохранить его по общему пути. Работа с Rails 4.

https://gist.github.com/potapuff/090b2da4a4156c1272430241cb70edc0

namespace :static do
  desc 'Render all resources'
  task :publicate => :environment do
    resources(VIEW_PATH).each do |src, dest|
      html= controller.render_to_string(file:src, layout:'application')
      dirname = File.dirname(dest)
      unless File.directory?(dirname)
        FileUtils.mkdir_p(dirname)
      end
      File.write(dest, html)
    end
  end

  def resources search_path
      ... 
  end

  def controller
    ApplicationController.new.tap do |controller|
       ...
    end
  end
end

Другая возможность - использовать gem render_anywhere .

В Rails 5 появилась новая возможность использовать внешние контроллеры рендеринга https://medium.com/evil-martians/the-rails-5-post-9c76dbac8fc

Вообще статический контент идет в твои public папка, в которую вы можете настроить Nginx или эквивалентную для маршрутизации, соответственно, даже не нажимая на Rails.

Для создания статического сайта в Ruby вы можете попробовать Jekyll https://jekyllrb.com/. Вы можете управлять своим сайтом Jekyll отдельно от вашего сайта Rails и генерировать статический HTML/CSS/JS при развертывании. Есть jekyll watch команда, которая будет прослушивать изменения файла и соответственно компилировать ваш статический контент.

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