我已将我的应用程序部署到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的资产, 我可以以某种方式禁用此行为?我只是希望包含一些资产用于特定的操作而不会头痛
答案 0 :(得分:2)
默认 Rails 4 不会为您的资产提供服务。要启用此功能,您需要进入 config / application.rb 并添加以下行:
config.serve_static_assets = true
或者,您可以通过在Gemfile中包含rails_12factor gem来实现相同的结果:
gem 'rails_12factor', group: :production
此gem将配置您的应用程序以提供静态资源,这样您就不需要在配置文件中手动执行此操作。
希望这对你有用。