2010-05-28 2 views
4

Au lieu de servir mes fichiers Sass de la valeur par défaut dans le répertoire 'vues de Je voudrais changer cela /assets/sassComment spécifier le répertoire Sass personnalisé avec Sinatra

Les tentatives suivantes sont dans mon dossier principal de la racine ruby ​​dans l'application :

Tentative 1:

set :sass, Proc.new { File.join(root, "assets/sass") } 

get '/stylesheet.css' do 
    sass :core 
end 

Avec cela, je reçois l'erreur suivante:

myapp.rb:17 NoMethodError: undefined method `merge' for "/Users/x/x/x/mysinatraapp/assets/sass":String 

Tentative 2:

get '/stylesheet.css' do 
    sass :'/assets/sass/core' 
end 

Tentative 3:

get '/stylesheet.css' do 
    sass :'/assets/sass/core' 
end 

Les deux renvoient l'erreur suivante:

Errno::ENOENT: No such file or directory - ./views/assets/sass/core.sass 

Tentative 4:

get '/stylesheet.css' do 
    sass :'../assets/sass/core' 
end 

Cela fonctionne! Cependant, il doit y avoir quelque chose dans le genre de set :sass, Proc.new { File.join(root, "assets/sass") } qui met cela en place pour moi?

Répondre

1

Il n'existe pas de solution pour l'instant, car Sinatra n'accepte actuellement qu'un seul répertoire de vue.

Vous pouvez essayer d'utiliser sinatra-compass et set :compass, :sass_dir => 'assets' et ne placer qu'un seul fichier SASS dans votre dossier de vue, qui simplement @import stylesheet.sass ou vous pouvez remplacer #sass:

helpers do 
    def sass(template, *args) 
    template = :"#{settings.sass_dir}/#{template}" if template.is_a? Symbol 
    super(template, *args) 
    end 
end 

set :sass_dir, '../assets' 
+0

Cette réponse ressemble beaucoup, mais je ne peux pas l'air de se rouler - des idées où je vais mal?- http://pastie.org/986956 - Merci beaucoup –

+0

Vous utilisez 'settings.sass_dir' mais' set: sass, ... '. Vous devriez 'set: sass_dir, ...' ('sass' pourrait être utilisé par sinatra et devrait être un hachage, vous devriez donc éviter d'utiliser ce nom). –

+0

@KonstantinHaase Est-ce toujours le meilleur/seul moyen de le faire? Je suis à la recherche d'une (bonne) méthode de rendu des mises en page mobiles selon que le client est un appareil mobile ou non. J'espérais qu'il y avait un moyen de changer le dossier de vues sur une base par route, comme c'est le cas pour la mise en page par défaut. –

0

Je ne peux actuellement pas le tester moi-même, mais avez-vous essayé ce qui suit.

set :sass, File.dirname(__FILE__) + '/assets' 

EDIT: The Sass reference pourrait aider aussi.

+0

J'ai pris un coup d'œil à la merci ref Sass, l'extrait de code me donne la même erreur que dans la tentative 1. Des cris de joie –

0

Cela n'aide probablement pas depuis que je devine que vous avez d'autres choses sous views que vous voulez rester sur place, mais vous pouvez changer le répertoire views et ...

set :views, File.dirname(__FILE__) + '/assets' 

Ensuite, vous pouvez faire:

get '/stylesheet.css' do 
    sass :'sass/core' 
end 
1

Vous pouvez jeter un oeil à cet article . Après avoir rencontré de nombreux sites, j'ai pu obtenir mes fichiers sass dans un répertoire différent au lieu du répertoire 'views' avec cet article.

3

Définissez votre répertoire de modèles, puis rendez un Sass :: Engine manuellement.

require 'sinatra' 
require 'sass' 

SASS_DIR = File.expand_path("../stylesheets", __FILE__) 

get "/" do 
    erb :index 
end 

get "/stylesheets/:stylesheet.css" do |stylesheet| 
    content_type "text/css" 
    template = File.read(File.join(SASS_DIR, "#{stylesheet}.sass")) 
    Sass::Engine.new(template).render 
end 
Questions connexes