0

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

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

4

2 回答 2

2

通常静态内容放在您的public文件夹中,您可以配置 Nginx 或等效路由到相应的路径,甚至不需要点击 Rails。

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

于 2016-04-13T19:30:21.933 回答
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

于 2016-04-18T18:50:44.527 回答