【问题标题】:Rails 4 Heroku Assets not loading, though in heroku asset pipelineRails 4 Heroku 资产未加载,尽管在 heroku 资产管道中
【发布时间】:2016-06-02 15:52:29
【问题描述】:

我对 heroku 上的某些资产有疑问。 (本地环境运行良好) 资产正在筹备中。如果我在 heroku rails 控制台中执行:

helper.asset_path("typicons.woff")
helper.asset_path("backgrounds/1.jpg")

我收到以下回复:

/assets/typicons-c2430aad2b6a33948dc064cfaee8ad65ff9e3ca439834f3aaa84abec3d10dea8.woff
/assets/backgrounds/1-c2098ff7e7fbb89b2d18e9cd9089f712f2b837265d1d2e4182c36c23392760c6.jpg

所以我假设资产在 heroku 资产管道中。同样通过直接打开带有摘要的 url,我收到了文件。

但是,如果我尝试像这样引用 css 或 javascript 中的文件:

  $('.top-content').backstretch("/assets/backgrounds/1.jpg");

文件未加载。直接打开 /assets/backgrounds/1.jpg 也不起作用。从 .rb 或 .erb 文件中引用资产是可行的。

请有人告诉我,我必须更改什么样的配置,这样资产的 URL 也可以在没有摘要的情况下工作?

谢谢!

【问题讨论】:

  • 试试$ RAILS_ENV=production bin/rake assets:precompileRAILS_ENV=production bundle exec rake assets:precompile
  • 它没有回答我的问题。资产已编译并在 heroku 上。我只是无法从非 ruby​​ 文件中引用它们。并且在 heroku bash 上运行预编译命令没有任何影响

标签: ruby-on-rails ruby-on-rails-4 heroku asset-pipeline


【解决方案1】:

假设您使用的是相当标准的资产管道设置,Rails 指南中的这段内容应该会有所帮助:

如果您将 erb 扩展添加到 JavaScript 资产,使其类似于 application.js.erb,那么您可以在 JavaScript 代码中使用asset_path 帮助程序:

-- http://guides.rubyonrails.org/asset_pipeline.html(第 2.3.3 节)

在您的示例中,将 erb 扩展名添加到您的 JS 文件中,然后将行更改为

 $('.top-content').backstretch(<%= asset_path("backgrounds/1.jpg") %>);

【讨论】:

  • 感谢您的回答。它按预期工作。您只需将该行调整为 `$('.top-content').backstretch('')` 1. 将行放在引号中 2.删除资产 3. 确保 backgrounds/1.jpg 路径前没有斜线
  • 更新了我的答案;如果它有效/有帮助,请随时接受答案。
【解决方案2】:

问题在于 Rails 4 根本不支持未消化的资产。(无论出于何种原因) 这是对该问题的更彻底的解释:Non Digested Asset Names in Rails 4 我个人的解决方法是在我的应用程序中添加一个公共资产文件夹:

public/assets/static/

并在那里上传所需的资产。由于它只是关于字体和背景图像,它们不会经常更改,因此似乎不是问题。在上面的链接中,还提出了其他几种解决方案。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-08
    相关资源
    最近更新 更多