Действительно статичные страницы с 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
команда, которая будет прослушивать изменения файла и соответственно компилировать ваш статический контент.