Rails 的真正静态页面
Really static pages with Rails
应用程序中的某些页面必须可以访问,即使应用程序已关闭。例如 50x 错误的页面。最简单的方法是创建静态 HTML 页面,这些页面将由网络服务器(如 Nginx 上的 apache)提供服务。这些页面中的大部分都与应用程序有共同的布局。因此,如果我们更改应用程序中布局的某些部分,我们必须手动更改所有静态页面。
将 rails 页面存储为静态文件并根据项目中的相同更改重新创建它(自动或通过 rake 任务)的最佳方法是什么? rails 的任何 gem 或能够重用 rails 布局和资源(CSS、js、图像)的静态站点生成器。
通常,静态内容位于您的 public
文件夹中,您可以配置 Nginx 或等效路由以相应地路由到该文件夹,甚至无需点击 Rails。
对于 Ruby 中的静态站点生成,您可能需要查看 Jekyll https://jekyllrb.com/。您可以将 Jekyll 站点与 Rails 站点分开管理,并在部署时生成静态 HTML/CSS/JS。有一个 jekyll watch
命令可以侦听文件编辑并相应地编译您的静态内容。
有简单的 rake 任务(通过 GIST)从 VIEW_PATH 加载所有文件,用应用程序布局包装它并将它存储在 public 中的相同路径下。使用 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
应用程序中的某些页面必须可以访问,即使应用程序已关闭。例如 50x 错误的页面。最简单的方法是创建静态 HTML 页面,这些页面将由网络服务器(如 Nginx 上的 apache)提供服务。这些页面中的大部分都与应用程序有共同的布局。因此,如果我们更改应用程序中布局的某些部分,我们必须手动更改所有静态页面。
将 rails 页面存储为静态文件并根据项目中的相同更改重新创建它(自动或通过 rake 任务)的最佳方法是什么? rails 的任何 gem 或能够重用 rails 布局和资源(CSS、js、图像)的静态站点生成器。
通常,静态内容位于您的 public
文件夹中,您可以配置 Nginx 或等效路由以相应地路由到该文件夹,甚至无需点击 Rails。
对于 Ruby 中的静态站点生成,您可能需要查看 Jekyll https://jekyllrb.com/。您可以将 Jekyll 站点与 Rails 站点分开管理,并在部署时生成静态 HTML/CSS/JS。有一个 jekyll watch
命令可以侦听文件编辑并相应地编译您的静态内容。
有简单的 rake 任务(通过 GIST)从 VIEW_PATH 加载所有文件,用应用程序布局包装它并将它存储在 public 中的相同路径下。使用 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