如何生成与rails应用程序的html文件匹配的资产?

时间:2012-07-13 21:31:31

标签: html css ruby-on-rails ruby erb

我通过在控制器中使用render_to_string创建了一个html文件,并使用send_data将html文件发送给用户。这很好用,我收到的文件与我在浏览器中右键单击并查看页面源时看到的html相匹配。但是,在我的html文件中有指向我的app / assets文件夹中不存在的css文件和.js文件的链接。

例如,html文件中有一个指向application.css的链接,但app / assets文件夹中只有application.css.scss。或者另一个例子; lightbox.css.erb而不是lightbox.css。

此外,html中的一些路径是错误的,例如图像位于app / assets / images中,但html正在app / assets中查找。路径不是问题,因为我可以用nokogiri编辑生成的html,但我很好奇为什么它们不同。

这正是我想要做的rails: emulate "Save page as" behaviour

除了我以不同的方式获取我的HTML,无论出于何种原因,我找不到我正在寻找的资产。如前所述,html显示有效,打开文件将显示html中的文本,但在更改链接路径之前不会显示任何图像或资源。

根据我的阅读,rails会将scss转换为css并将erb文件渲染为js或html。但是,我无法在我的目录中找到这些文件。如何生成我需要的文件,以便独立于rails应用程序显示我的静态html文件?

我正在使用Rails 3.2.2和jruby 1.6.7(ruby 1.9.2)

1 个答案:

答案 0 :(得分:1)

在将rails应用程序部署到生产模式之前,所有资产(css,javascripts和images)通常都是预编译的,并放置在公共目录中,这是您的rails呈现的html页面查找资产的位置。

在开发模式下,通常不会执行此预编译,但如果需要,可以执行此预编译。要生成已编译的资产,您可以运行rake assets:precompile。这将编译您的资产,“指纹”它们并将它们放在公共文件夹中。 “指纹”意味着它将根据资产的文件内容生成散列,并将散列放在资产的文件名中,这有助于确定资产内容是否/何时仅通过读取文件名而发生变化。

运行此命令后,您可以将资产复制或移动到新目录(在rails应用程序之外),您可以在其中独立于rails应用程序提供html页面和这些资源。您也可以从公共目录中删除已编译的资产,因为这些资产在开发模式下通常不是很有用。

在某些背景下,我会阅读Asset Pipeline