带有Rails的真正静态页面

时间:2016-04-13 19:22:18

标签: ruby-on-rails rubygems static-pages

即使应用程序关闭,也必须可以访问应用程序中的某些页面。例如50x错误的页面。最简单的方法 - 创建静态HTML页面,这将由Web服务器(如Nginx上的apache)提供。大多数页面都与应用程序具有共同的布局。因此,如果我们在应用程序中更改部分布局,则必须手动更改所有静态页面。

将rails页面存储为静态文件并在项目中的相同更改中重新创建(自动或通过rake任务)的最佳方法是什么?任何用于rails或静态站点生成器的gem都能够重用rails布局和资源(CSS,js,images)。

2 个答案:

答案 0 :(得分:2)

通常,静态内容会进入您的public文件夹,您可以配置Nginx或相应的路由到相应的路由,甚至无需点击Rails。

对于Ruby中的静态站点生成,您可能需要查看Jekyll https://jekyllrb.com/。您可以从Rails站点单独管理Jekyll站点,并在部署时生成静态HTML / CSS / JS。有jekyll watch命令可以监听文件编辑并相应地编译静态内容。

答案 1 :(得分:0)

有简单的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#1b36