我一直在尝试按照指南在 sinatra 应用程序中设置资产管道,目的是在加载我的网页时减少我的 http 请求。该指南位于此处
我认为我在 sinatra 应用程序中创建模块时遇到了挫折,如果这是基本的但以前没有这样做过,我深表歉意。
所以我创建了一个名为 modules 的文件夹并在其中放置了一个 assets.rb 文件。我已经修改了脚本以满足我的需要
class Assets < Sinatra::Base
configure do
set :assets, (Sprockets::Environment.new { |env|
env.append_path(settings.root + "/assets/js")
env.append_path(settings.root + "/assets/css")
# compress everything in production
if ENV["RACK_ENV"] == "development || production"
env.js_compressor = YUI::JavaScriptCompressor.new
env.css_compressor = YUI::CssCompressor.new
end
})
end
get "/assets/js/app.js" do
content_type("application/javascript")
settings.assets["app.js"]
end
get "/assets/css/app.css" do
content_type("text/css")
settings.assets["app.css"]
end
end
我的资产目录结构
assets
css
app.css
other.css
js
app.js
other.js
我的 config.ru
require './david'
use Assets
run Sinatra::Application
在我的每一个 app.js 和 app.css 中,我都放了
// require_tree
但是在我的 js 文件中它是灰色的,而在 css 中它仍然是白色的?
我已经安装了所需的两个 gem,但是在加载页面时仍然有多个 http 请求,而不是将所有 css 和 js 分组为一个调用
任何人都可以看到我缺少的任何东西,主要是我猜测的模块设置吗?
谢谢
编辑
我当前的布局文件
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
<title>David's Carpets</title>
<!--stylesheets-->
<%= stylesheet_link_tag "/assets/css/font-awesome.min.css" %>
<!--[if IE 7]>
<link rel="stylesheet" href="/assets/css/font-awesome-ie7.min.css">
<![endif]-->
<%= stylesheet_link_tag "/assets/css/bootstrap.min.css" %>
<%= stylesheet_link_tag "/assets/css/bootstrap-responsive.min.css" %>
<%= stylesheet_link_tag "/assets/css/custom.min.css" %>
<%= stylesheet_link_tag "/assets/css/resp-980.min.css" %>
</head>
<body onload="initialize()">
<%= styled_flash %>
<%= yield %>
<%= erb :footer %>
<!-- Javascript -->
<script src="/assets/js/jquery-1.7-min.js" type="text/javascript"></script>
<script src="/assets/js/valid_mail.min.js" type="text/javascript"></script>
<script src="/assets/js/twitter.min.js" type="text/javascript"></script>
<script src="/assets/js/custom.min.js" type="text/javascript"></script>
</body>
</html>