【发布时间】:2015-06-30 12:32:05
【问题描述】:
我已将我的应用程序部署到 heroku,但某些资产未加载,例如:
- GET https://myapp.herokuapp.com/javascripts/s3_direct_upload.js - 404
- GET https://myapp.herokuapp.com/stylesheets/s3_direct_upload_progress_bars.css - 404
问题出在预编译中,我必须手动将每个文件添加到 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
另外,//=我的预编译资产中的要求不包含在标题中
在我的笔记本电脑上的开发环境中一切正常
我需要进行哪些更改才能使其在生产中运行?
更新
我使用 helper,在视图中包含一些 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的第二个require,它导致了这个错误
但我仍然无法在没有预编译的情况下包含来自 gem 的资产, 我可以以某种方式禁用此行为吗?我只想包含一些用于特定操作的资产而不会让人头疼
【问题讨论】:
-
在部署到 Heroku 之前,您是否在控制台中运行了
rake assets:precompile? -
我也试过了,但是我包含了一些带有
javascript_include_tag的文件,所以它们没有包含在预编译中
标签: ruby-on-rails heroku