Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby 无挂起Sinatra应用程序_Ruby_Sinatra_Less - Fatal编程技术网

Ruby 无挂起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'

我正在尝试向Sinatra应用程序添加引导。我有编译
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.paths
    paths=>['views']
    不是redunant。Less编译器需要它来解析其导入。@danneu提到的问题是关于tilt gem中的一个bug,这个bug已经在git的最新版本中解决了。作为替代建议,为什么不预编译这些资产呢?我有一个运行Bootstrap的应用程序,并且(使用Guard)我会将所有样式表预编译成CSS,然后将它们作为静态资产上传。它更快、更简单,而且不需要动态编译,那么为什么要这样做呢?@svnieuw但如果您使用Guardfile或从命令行中查看
    watch
    ,则更方便,因为它在保存时而不是刷新时重新编译。
    *.css
    文件在我的问题中是一个错误。我只使用了
    *更少的
    文件。我已经更新了我的问题。挂起并不总是发生。似乎我在less编译器或ruby gem中遇到了一些竞争条件。无论如何,谢谢你的建议。