静态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
文件夹(如果您还没有),然后是 images
和 stylesheets
。
并创建常规 html 页面
- app
...
- public
- 404.html
- images
- image1.jpg
- image2.jpg
- stylesheets
- style.css
然后在您的 404.html
中,您将像这样引用它:
<img src="./assets/images/image1.jpg" alt=""/>
如果您希望错误页面使用资产管道中的图像,那么您有两个选择:
- 使用动态错误页面(我写过教程here)。
- 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"/>
我正在使用 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
文件夹(如果您还没有),然后是 images
和 stylesheets
。
并创建常规 html 页面
- app
...
- public
- 404.html
- images
- image1.jpg
- image2.jpg
- stylesheets
- style.css
然后在您的 404.html
中,您将像这样引用它:
<img src="./assets/images/image1.jpg" alt=""/>
如果您希望错误页面使用资产管道中的图像,那么您有两个选择:
- 使用动态错误页面(我写过教程here)。
- 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"/>