Rails 4:Heroku上的资产

时间:2015-06-30 12:32:05

标签: ruby-on-rails heroku

我已将我的应用程序部署到heroku,但某些资产未加载,例如:

问题在于预编译,我必须手动将每个文件添加到assets.rb 但我真的不想这样做,因为他们中有很多

在我的assets.rb中我尝试过:

Rails.application.config.assets.precompile << Proc.new { |path|
  if path =~ /\.(css|js)\z/
    full_path = Rails.application.assets.resolve(path).to_path
    app_assets_path = Rails.root.join('app', 'assets').to_path
    if full_path.starts_with? app_assets_path
      puts "including asset: " + full_path
      true
    else
      puts "excluding asset: " + full_path
      false
    end
  else
    false
  end
}

Rails.application.config.assets.precompile = false

但它不起作用

我已添加到application.rb

config.serve_static_files = true

另外,// =我的预编译资产中的require不包含在标题

我的笔记本电脑上的开发环境中的一切都很好用

我需要做些什么才能让它在生产中发挥作用?

更新

我使用帮助器,在视图中包含一些js和css文件:

def javascript(*files)
  content_for(:foot) { javascript_include_tag(*files) }
end

在我看来,我有:

<% stylesheet 's3_direct_upload_progress_bars' %>
<% javascript 's3_direct_upload', 'init.script.js' %>
来自gem s3_direct_upload的

资产未加载 init.script.js位于assets / javascripts中,因此它应该加载

另一个问题,在我的application.js中我有:

//= require jquery
//= require jquery.slicknav.min.js

$(function ()
{
    $('#menu').slicknav();
});

assets:precompile之后它看起来没问题,但在控制台中我有错误:

$(...).slicknav is not a function

所以编译错了?一切在开发环境中都很好

更新2

忽略第二个问题,我发现第二个需要jquery,它导致了这个错误

但是我还是不能在没有预编译的情况下包含来自gem的资产, 我可以以某种方式禁用此行为?我只是希望包含一些资产用于特定的操作而不会头痛

1 个答案:

答案 0 :(得分:2)

默认 Rails 4 不会为您的资产提供服务。要启用此功能,您需要进入 config / application.rb 并添加以下行:

config.serve_static_assets = true

或者,您可以通过在Gemfile中包含rails_12factor gem来实现相同的结果:

gem 'rails_12factor', group: :production

此gem将配置您的应用程序以提供静态资源,这样您就不需要在配置文件中手动执行此操作。

希望这对你有用。