静态404页面Rails 4:asset pipeline如何使用?

Static 404 page Rails 4: how to use the asset pipeline?

我正在使用 Rails 4.2.3 并尝试在 public/404.html 中自定义 404 错误页面。如何包含资产管道中的图像?

excellent post 如何构建动态自定义错误页面。然而,正如那里所描述的,它需要对设置进行大量更改,作为初学者,我还没有准备好接受这些更改。我想要做的就是在我的 404 页面中包含资产管道中的 2 个图像。有没有简单的方法可以做到这一点?

在新应用程序中,未找到的路由被定向到在 public/404.html 中找到的静态 html 页面。正如您所发现的,这是一个 .html 而不是 .html.erb 文件,这意味着您必须做一些花哨的事情才能访问您的资产管道。

如果您不想经历创建动态页面的麻烦,最简单的方法是将资产管道中的两个图像复制*到 public/assets(或子目录)中,然后然后将它们包含在:

<img src="assets/image.jpg">

*您也可以使用符号 link,但它可能会导致问题,具体取决于您的生产服务器的设置方式。

在您的 404.html 添加...

<head>
  <link data-turbolinks-track="true" href="/assets/application.css" media="all" rel="stylesheet" />
  <script data-turbolinks-track="true" src="/assets/application.js"></script>
</head>
<body>
  <img src="simple.gif">
</body>

请记住,public 文件夹的内容对任何人都可见。 为此,按照惯例,我将创建 assets 文件夹(如果您还没有),然后是 imagesstylesheets。 并创建常规 html 页面

- app
...
- public
  - 404.html
  - images
    - image1.jpg
    - image2.jpg
  - stylesheets
    - style.css

然后在您的 404.html 中,您将像这样引用它:

<img src="./assets/images/image1.jpg" alt=""/>

如果您希望错误页面使用资产管道中的图像,那么您有两个选择:

  1. 使用动态错误页面(我写过教程here)。
  2. Monkey 修补资产管道以允许非指纹资产。

既然你现在排除了选项#1,我认为猴子补丁是可行的方法。在您的应用中安装 non-stupid-digest-assets gem。这将修补资产管道,以便它生成非指纹资产(除了指纹资产)。

# Gemfile
gem "non-stupid-digest-assets"

当然,别忘了:

$ bundle install

然后在您的 404.html 中引用资产,就好像它是静态文件一样,如下所示:

<img src="/assets/my-image.png">

这假设实际图像存储在您的项目中:

app/assets/images/my-image.png

将图像添加到 public 文件夹。

使用 public 404/500 html 页面上图像的根相对路径。

<img src="/my-logo.png"/>