在heroku服务器中加载图像时出错

时间:2014-09-18 09:09:26

标签: javascript ruby-on-rails ruby ruby-on-rails-4 heroku

我在rails应用程序上有一个ruby,我在javascript文件中使用了一些图像,如下所示:

  var urlshapes = "/assets/shapes/";

    // image loader
  imageURLs.push(urlshapes + "isit.png");
  imageURLs.push(urlshapes + "ec.png");
  imageURLs.push(urlshapes + "bc.png");
  imageURLs.push(urlshapes + "bb.png");
  imageURLs.push(urlshapes + "io.png");
  loadAllImages();

使用WEBrick服务器它可以工作,但是当我上传到heroku服务器时,我得到了这个错误:

enter image description here

我已阅读此https://devcenter.heroku.com/articles/rails-4-asset-pipeline,结果我在我的Gem文件中添加了此行gem 'rails_12factor', group: :production,但我仍然收到错误。

我该怎么办?

Rails版本:4.1.5 Ruby版本:2.1.2

3 个答案:

答案 0 :(得分:1)

好像你使用asset pipeline。这意味着资产在开发和生产之间有不同的路径。您需要使用image path helpers在每个环境中获取正确的路径/ URL。 image_path帮助程序可能就是您所需要的。问题是这是一个Ruby方法,你想用Javascript代码调用它。有两种解决方案:

  • 在您的javascript文件名末尾添加.erb。然后,您可以像在视图中一样使用ERB。例如imageURLs.push("<%= image_path('isit.png') %>")
  • 如果您的Javascript代码是从HTML页面加载的,请在视图中添加图片网址数组,然后通过Javascript引用它们。您可以将数据属性添加到HTML元素,也可以只添加<script>标记。 e.g:

<div data-images="['<%= image_path('1.png') %>', '<%= image_path('2.png') ']"> 要么 <%= javascript_tag("images = ['#{image_path("1.png")}']") %> 等等。

答案 1 :(得分:0)

在config / environments / production.rb中,您是否将其更改为true,如下所示:

config.serve_static_assets = true

Heroku预先将资产编译为公共/资产,因此您需要更改配置设置。

答案 2 :(得分:0)

我将所有内容放在公用文件夹中并更改为:

  var urlshapes = "/shapes/";

    // image loader
  imageURLs.push(urlshapes + "isit.png");
  imageURLs.push(urlshapes + "ec.png");
  imageURLs.push(urlshapes + "bc.png");
  imageURLs.push(urlshapes + "bb.png");
  imageURLs.push(urlshapes + "io.png");
  loadAllImages();