即使应用程序关闭,也必须可以访问应用程序中的某些页面。例如50x错误的页面。最简单的方法 - 创建静态HTML页面,这将由Web服务器(如Nginx上的apache)提供。大多数页面都与应用程序具有共同的布局。因此,如果我们在应用程序中更改部分布局,则必须手动更改所有静态页面。
将rails页面存储为静态文件并在项目中的相同更改中重新创建(自动或通过rake任务)的最佳方法是什么?任何用于rails或静态站点生成器的gem都能够重用rails布局和资源(CSS,js,images)。
答案 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