gpt4 book ai didi

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

转载 作者:数据小太阳 更新时间:2023-10-29 07:15:21 26 4
gpt4 key购买 nike

我对 Ruby 没有多少经验。我想从数据库而不是文件系统中@import sass。我没有在网上找到任何示例。我应该如何着手实现这一点。我看到我必须扩展一个导入器类,但由于我不了解 ruby​​,我需要知道这个类在我的文件系统中的位置(只是为了检查它)以及通常涉及的基本步骤是什么。

更多信息

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

@import test.scss
body { color:red }

现在在我的 MySQL 数据库中,我会有这样的东西

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

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

更新

所以我用 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 提供的链接之外,希望这能让您更接近一些。

关于ruby - 从数据库而不是文件系统导入 SASS 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13558811/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com