【问题标题】:How to serve static image in Rails 5 without using Asset Pipeline?如何在不使用资产管道的情况下在 Rails 5 中提供静态图像?
【发布时间】:2017-11-12 21:21:50
【问题描述】:

我有一个基于 Web 的应用程序,其后端构建在 Rails 5 上。 我使用 AngularJS 作为前端。我没有使用 Asset Pipeline 来提供任何静态内容,我所有的 scripts(JS&CSS) 都加载到位于public directory 并从那里我使用 angular 的 ng-route 来进一步管理位置。

问题出现在我的一个 HTML 页面中,我需要使用 HTML 图像标记 包含 图像,问题在于服务器找不到图片文件。

<img src="assets/images/logo.jpg" style="padding-bottom:20px;" />

我尝试将我的图像同时保存在 app/assets/imagespublic/assets/images 目录中,但在所有实例中,我都收到路由错误,指出在我的 rails 服务器控制台中找不到路由。

参考了几个堆栈溢出的答案,我在我的配置 development.rb 文件中尝试了这一行:

  config.public_file_server.enabled = true

但它没有用。那么如何在不使用 Rails Assetpipeline 的情况下提供图像呢?

【问题讨论】:

  • 尝试给&lt;img src="/assets/logo.jpg" style="padding-bottom:20px;" /&gt;而不是&lt;img src="assets/images/logo.jpg" style="padding-bottom:20px;" /&gt;
  • 也试过了,还是不行。 localhost:3000/assets/images/logo.jpg

标签: javascript ruby-on-rails angularjs ruby-on-rails-5


【解决方案1】:

要在不使用资产管道的情况下提供图片,请将图片放在 public 目录中。

your_app/public/images/logo.jpg 的图像在您的视图中使用 &lt;img src="/images/logo.jpg 引用。

Rails 还为此提供了一个辅助方法,它生成相同的代码但提供了一些额外的 Rails 功能:\

<%= image_tag('/images/logo.jpg') %>

同样,您省略了路径的 public 部分。此外,我建议不要在 public 中创建一个名为 assets 的目录 - 这将被资产管道覆盖。它也会让你感到困惑。我会将该目录名称更改为其他名称。

【讨论】:

  • 我也这样做了,但在 Rails 服务器控制台中出现路由错误。没有路线匹配 [GET] "/images/logo.jpg"
  • 在 2017-06-11 14:37:29 +0530 ActionController::RoutingError 开始 GET "/images/logo.jpg" for 127.0.0.1 (No route matches [GET] "/images/ logo.jpg"): actionpack (5.0.2) lib/action_dispatch/middleware/debug_exceptions.rb:53:in `call'
  • 好的,你能用完整的目录结构更新你的问题吗?
  • 另外,不使用资产管道也是一个非常糟糕的主意。你应该使用新的 webpacker gem,否则当你更新你的 JS 并且过去的访问者缓存了以前的版本时,你会遇到很多麻烦。
  • 为我工作,但正确的 url 是 www.mysite.com/myimage.png(没有公共/图像,即使它位于应用程序内的公共文件夹中)
猜你喜欢
  • 1970-01-01
  • 2015-09-14
  • 1970-01-01
  • 1970-01-01
  • 2012-05-11
  • 1970-01-01
  • 1970-01-01
  • 2011-09-21
  • 1970-01-01
相关资源
最近更新 更多