2

我通过在控制器中使用 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,但我很好奇它们为什么不同。

这几乎正​​是我想要做的轨道:模拟“将页面另存为”行为

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

根据我的阅读,rails 会将 scss 转换为 css 并将 erb 文件呈现为 js 或 html。不过,我在我的目录中的任何地方都找不到这些文件。如何生成我需要的文件,以便独立于 rails 应用程序显示我的静态 html 文件?

我正在使用带有 jruby 1.6.7(ruby 1.9.2)的 Rails 3.2.2

4

1 回答 1

1

在将 rails 应用程序部署到生产模式之前,您的所有资产(css、javascript 和图像)通常都经过预编译并放置在公共目录中,这是您的 rails 渲染的 html 页面查找资产的地方。

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

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

对于一些背景,我会阅读有关Asset Pipeline的信息。

于 2012-07-13T22:34:15.930 回答