2012-12-14 7 views
7

Sto cercando di aggiungere Bootstrap a un'applicazione Sinatra. Ho impostato i percorsi per compilare bootstrap.less e responsive.less. Il caricamento separato dei due fogli di stile in un browser Web funziona come previsto. Ma quando provo ad usarli in una pagina html la mia applicazione si blocca. Posso solo interrompere l'applicazione con kill -9.Meno blocchi Applicazione Sinatra

Sembra che in qualche modo meno importazioni e più fogli di stile causino un blocco dell'applicazione. Sono stato in grado di isolare il problema:

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 

viste/index.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 

viste/style1.less

@import "mixins.less"; 
@import "shadows.less"; 

@color: #00eeff; 

h1 { 
    color: @color; 
} 

viste/mixins.less

.box-shadow(@shadow) { 
    -webkit-box-shadow: @shadow; 
    -moz-box-shadow: @shadow; 
    box-shadow: @shadow; 
} 

viste/shadows.less

h1 { 
    .box-shadow(6px 6px 3px #888); 
} 

viste/style2.less

@color: #ccff00; 

p { 
    color: @color; 
} 

l'accesso alla pagina di indice si blocca Sinatra. Se commento fuori style2.less nella pagina html o in linea shadows.less o mixins.less in style1.less, la pagina viene caricata come previsto.

Qualche idea su quale potrebbe essere il problema o su come posso eseguire il debug di questo ulteriore?

+3

+1: Ben fatta prima domanda. –

+1

Forse prova 'Less.paths << settings.views' visto nella prima risposta qui: http://stackoverflow.com/questions/9606703/parsing-less-options-in-a-sinatra-app. Dire direttamente all'oggetto Less config ha senso per me. Inoltre, credo che 'percorsi: [" views "]' è ridondante e viene utilizzato solo se i file importati di meno sono stati posizionati in un punto diverso da '/ views'. – danneu

+0

'paths => ['views']' non è ridondante. Era necessario dal compilatore Less per risolvere le sue importazioni. La domanda a cui si riferisce @danneu riguarda un bug nella gemma tilt che è già stato risolto nell'ultima versione di git. – stijnvn

risposta

1

ho preso i file e fatto piccole modifiche a loro:

  • ho rinominato style2.css a style2.less modo da poter utilizzare meno su di esso, e, infine, scaricare lo style2.css con la sintassi CSS corretto --- E ' non funzionava con l'altra estensione.
  • E, ho detto a Less che il percorso per cercare le direttive, era il percorso delle viste di Sinatra: Less.paths << settings.views.

Quindi, con queste modifiche, l'applicazione Sinatra ha smesso di appendere.

+1

Il file '* .css' era un errore nella mia domanda. Sto solo usando i file '* less'. Ho aggiornato la mia domanda. Il blocco non si verifica sempre. Sembra che io stia colpendo alcune condizioni di gara nel meno compilatore o gemma rubino. Grazie comunque per il tuo suggerimento. – stijnvn