加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ruby – 从数据库而不是文件系统导入SASS文件

发布时间:2020-12-17 03:22:25 所属栏目:百科 来源:网络整理
导读:我对 Ruby没有多少经验.我想从数据库而不是文件系统@import sass.我没有在网上找到任何例子.我该怎么做呢?我看到我必须扩展一个导入器类,但由于我不了解ruby,我需要知道我的文件系统中该类所在的位置(只是检查它)以及一般涉及的基本步骤是什么. 更多信息 My
我对 Ruby没有多少经验.我想从数据库而不是文件系统@import sass.我没有在网上找到任何例子.我该怎么做呢?我看到我必须扩展一个导入器类,但由于我不了解ruby,我需要知道我的文件系统中该类所在的位置(只是检查它)以及一般涉及的基本步骤是什么.

更多信息

MySQL数据库包含sass内容.
因此,在我的Web应用程序中,我接受来自用户的sass(作为字符串),其中可能包含import语句,例如:

@import test.scss
body  { color:red }

现在在我的MySQL DB中,我会有类似的东西

Table  sass_files
column_name             filename  |   content
example row             test.scss |   p {color:blue;}

我想让这个导入工作,确保我可以只是进行正则表达式匹配从用户输入获取文件名,然后通过该文件名查询数据库并获取内容.
但我读到有一种很好的方法可以让ruby / sass使用DB作为加载路径而不是文件系统.

UPDATE

所以我用find方法创建了一个虚拟自定义导入器类

def find(name,options)
  Sass::Engine.new("p { color :blue; }",options)
end

如何使用ruby将此导入程序添加到sass加载路径中,就像我可以更改sass gem文件夹中的源文件并将此导入程序添加到lib / sass / importers中?

谢谢

解决方法

由于您使用Compass进行编译,因此可以在Compass配置文件中添加自定义Sass导入程序.例如,使用compass compile -c config.rb进行编译,你可以在config.rb文件中包含这样的内容:

require File.join(File.dirname(__FILE__),'importer.rb')
Sass.load_paths << Sass::Importers::Custom.new()

然后在同一目录中的importer.rb中,包含导入器定义:

module Sass
    module Importers
        class Custom < Base
            def find(name,options)
                if name == '[globals]'
                    options[:syntax] = :scss
                    options[:filename] = 'globals'
                    options[:importer] = self
                    return Sass::Engine.new("$imported-variable: blue;",options)
                else
                    return nil
                end
            end

            def find_relative(uri,base,options)
                nil
            end

            def key(uri,options)
                [self.class.name + ":" + uri,uri]
            end

            def mtime(uri,options)
                nil
            end

            def to_s
                '[custom]'
            end
        end
    end
end

然后在您的Sass文件中,您可以使用导入程序:

@import '[globals]';
p {
    color: $imported-variable;
}

当然,这只是一个虚拟实现,只接受匹配“[globals]”的URI.您需要提供访问MySQL数据库的自己的实现,因为我没有任何Ruby数据库访问经验.不过,除了@Sean提供的链接之外,希望这会让你更近一些.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读