在生产中重新编译Sass资产

问题描述:

我正在开发一款Rails应用程序,我们希望允许用户使用管理工具来创建新主题。管理工具是一个单独的应用程序,并通过数据库与我们的主应用程序通信。我的问题是我编写了自定义的Sass扩展来将我们的数据加载到我们的样式表中,但一旦完成,我无法在生产环境中重新编译资源。在生产中重新编译Sass资产

到目前为止,我已经看到了两种可能性是:

1.Increment config.assets.version的版本。所以我有这样的代码:

MyApp::Application.assets.version = 
     (MyApp::Application.config.assets.version.to_i + .1) 

从我读过什么增加一点应引起资产重新编译,但似乎当用手递增,重新启动服务器只工作。

2.创建一个编译器,并告诉它清理旧资产,并重新编译:

compiler = Compass::Compiler.new(
        Rails.root.to_s, 
        Compass.configuration.sass_path, 
        Compass.configuration.css_path, 
        {:sass => Compass.sass_engine_options}) 
compiler.clean! 
compiler.run 

使用这种方法,但是,我碰到的问题是,链轮:: Index.expire_index!方法在尝试创建新编译器时引发错误。

是的,我知道我可以设置资产重新编译每个请求,但性能命中不是我们想要的。另外,由于这是一个主题,数据不应该经常变化,所以我们只需要在管理员选择保存新主题时重新编译。

所以,最后,我的问题是:有没有其他可能的方法来做我想要的?或者我是走向正确的道路,如果是这样,我会在哪里出错?

编辑: 我忘了提及,因为我们使用Sass函数来更改样式表的值,即使我打开生产编译选项,它也不起作用。由于实际样式表永远不会改变。

Rails有一个Rake任务,可以为您进行资产编译。每次将应用程序部署到生产环境时,您都应该运行一次。

rake assets:precompile

编译后的资产输出到public/assets。欲了解更多详情,请查看Rails Asset Pipeline Guide