Ruby 无挂起Sinatra应用程序
我正在尝试向Sinatra应用程序添加引导。我有编译Ruby 无挂起Sinatra应用程序,ruby,sinatra,less,Ruby,Sinatra,Less,我正在尝试向Sinatra应用程序添加引导。我有编译bootstrap.less和responsive.less的设置路径。在web浏览器中分别加载两个样式表的工作方式与预期相同。但当我试图在html页面中使用它们时,我的应用程序挂起。我只能使用kill-9停止应用程序 看起来,导入量少和样式表多导致应用程序挂起。我能够隔离问题: app.rb require 'rubygems' require 'bundler/setup' require 'sinatra' require 'less'
bootstrap.less
和responsive.less的设置路径。在web浏览器中分别加载两个样式表的工作方式与预期相同。但当我试图在html页面中使用它们时,我的应用程序挂起。我只能使用kill-9
停止应用程序
看起来,导入量少和样式表多导致应用程序挂起。我能够隔离问题:
app.rb
require 'rubygems'
require 'bundler/setup'
require 'sinatra'
require 'less'
get '/' do
haml :index
end
get '/style1.css' do
less :style1, :paths => ['views']
end
get '/style2.css' do
less :style2, :paths => ['views']
end
视图/索引.haml
!!! 5
%html
%head
%title Hello World
%link{'rel' => 'stylesheet', 'href' => 'style1.css', 'type' => 'text/css'}
%link{'rel' => 'stylesheet', 'href' => 'style2.css', 'type' => 'text/css'}
%body
%h1 Hello World
%p Hello World
视图/样式1.less
@import "mixins.less";
@import "shadows.less";
@color: #00eeff;
h1 {
color: @color;
}
.box-shadow(@shadow) {
-webkit-box-shadow: @shadow;
-moz-box-shadow: @shadow;
box-shadow: @shadow;
}
h1 {
.box-shadow(6px 6px 3px #888);
}
@color: #ccff00;
p {
color: @color;
}
查看/混合。较少
@import "mixins.less";
@import "shadows.less";
@color: #00eeff;
h1 {
color: @color;
}
.box-shadow(@shadow) {
-webkit-box-shadow: @shadow;
-moz-box-shadow: @shadow;
box-shadow: @shadow;
}
h1 {
.box-shadow(6px 6px 3px #888);
}
@color: #ccff00;
p {
color: @color;
}
视图/阴影。较少
@import "mixins.less";
@import "shadows.less";
@color: #00eeff;
h1 {
color: @color;
}
.box-shadow(@shadow) {
-webkit-box-shadow: @shadow;
-moz-box-shadow: @shadow;
box-shadow: @shadow;
}
h1 {
.box-shadow(6px 6px 3px #888);
}
@color: #ccff00;
p {
color: @color;
}
视图/样式2.less
@import "mixins.less";
@import "shadows.less";
@color: #00eeff;
h1 {
color: @color;
}
.box-shadow(@shadow) {
-webkit-box-shadow: @shadow;
-moz-box-shadow: @shadow;
box-shadow: @shadow;
}
h1 {
.box-shadow(6px 6px 3px #888);
}
@color: #ccff00;
p {
color: @color;
}
访问索引页会挂起Sinatra。如果我在html页面中注释掉style2.less
,或在style1.less中插入shadows.less
或mixins.less
,页面将按预期加载
你知道问题出在哪里,或者我如何进一步调试吗?我拿了你的文件,对它们做了一些小改动:
- 我将
style2.css
重命名为style2.less
,这样我就可以在上面使用更少的代码,并最终下载了style2.css,它使用了正确的css语法——它不适用于其他扩展
- 而且,我告诉Less搜索指令的路径是Sinatra的视图路径:
Less.paths+1:第一个问题问得好。也许可以尝试Less.pathspaths=>['views']
不是redunant。Less编译器需要它来解析其导入。@danneu提到的问题是关于tilt gem中的一个bug,这个bug已经在git的最新版本中解决了。作为替代建议,为什么不预编译这些资产呢?我有一个运行Bootstrap的应用程序,并且(使用Guard)我会将所有样式表预编译成CSS,然后将它们作为静态资产上传。它更快、更简单,而且不需要动态编译,那么为什么要这样做呢?@svnieuw但如果您使用Guardfile或从命令行中查看watch
,则更方便,因为它在保存时而不是刷新时重新编译。*.css
文件在我的问题中是一个错误。我只使用了*更少的文件。我已经更新了我的问题。挂起并不总是发生。似乎我在less编译器或ruby gem中遇到了一些竞争条件。无论如何,谢谢你的建议。