【问题标题】:How to specify custom Sass directory with Sinatra如何使用 Sinatra 指定自定义 Sass 目录
【发布时间】:2011-02-24 22:39:51
【问题描述】:

我不想从默认的“views”目录中提供我的 Sass 文件,而是将其更改为 /assets/sass

以下尝试在我的应用程序的主 ruby​​ 根文件中:

尝试 1:

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

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

这样我得到以下错误:

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

尝试 2:

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

尝试 3:

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

两者都返回以下错误:

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

尝试 4:

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

这行得通!但是,一定有一些类似于set :sass, Proc.new { File.join(root, "assets/sass") } 的东西为我设置了这个?

【问题讨论】:

    标签: ruby routing sinatra path sass


    【解决方案1】:

    设置你的模板目录,然后手动渲染一个 Sass::Engine。

    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
    

    【讨论】:

      【解决方案2】:

      您可能想看看这篇文章。 http://railscoder.com/setting-up-sinatra-to-use-slim-sass-and-coffeescript/

      在浏览了许多网站后,我能够通过本文实现将我的 sass 文件放在不同的目录而不是“views”目录中。

      【讨论】:

        【解决方案3】:

        目前没有这样的方法,因为 Sinatra 目前只接受单个视图目录。

        您可以尝试使用sinatra-compassset :compass, :sass_dir => 'assets',并且只在您的视图文件夹中放置一个sass 文件,这将只是@import stylesheet.sass 或者您可以覆盖#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'
        

        【讨论】:

        • 这个答案看起来不错,但我似乎无法让它滚动 - 任何想法我哪里出错了? - pastie.org/986956 - 非常感谢
        • 您使用settings.sass_dir,但使用set :sass, ...。你应该set :sass_dir, ...sass 可能被 sinatra 使用,并且应该是一个哈希,所以你应该避免使用那个名字)。
        • @KonstantinHaase 这仍然是最好/唯一的方法吗?我正在寻找一种基于客户端是否是移动设备来呈现移动布局的(好的)方法。我希望有一种方法可以在每条路线的基础上更改视图文件夹,就像默认布局一样。
        • 不,你现在应该覆盖 find_template:sinatrarb.com/intro#Looking%20Up%20Template%20Files
        【解决方案4】:

        这可能无济于事,因为我猜您在 views 下还有其他要保留的内容,但您也可以更改 views 目录...

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

        那么你可以这样做:

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

        【讨论】:

          【解决方案5】:

          我目前无法自己测试,但您是否尝试过以下方法。

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

          编辑The Sass reference 也可能有帮助。

          【讨论】:

          • 我查看了 Sass 参考,谢谢,您的代码 sn-p 给了我与尝试 1 中相同的错误。干杯
          猜你喜欢
          • 2012-08-30
          • 1970-01-01
          • 2013-05-08
          • 2017-11-30
          • 2011-04-30
          • 2013-12-30
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多