ruby-on-rails - 在生产中重新编译 Sass Assets

标签 ruby-on-rails sass compass-sass sprockets

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

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

1.增加config.assets.version的版本。所以我有这个代码:

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

根据我读到的内容,增加这应该会导致 Assets 重新编译,但它似乎只有在手动增加并重新启动服务器时才有效。

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

但是,使用这种方法,我遇到了 Sprockets::Index.expire_index! 的问题!当我尝试创建新编译器时,方法会引发错误。

是的,我确实知道我可以将 Assets 设置为针对每个请求重新编译,但性能损失不是我们想要的。另外,由于这是一个主题,数据不应该经常改变,所以我们只需要在管理员选择保存新主题时重新编译。

所以,最后,我的问题是:还有其他可能的方法来完成我想要的事情吗?或者说我走的路是对的吗?如果是的话,我哪里出了问题?

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

最佳答案

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

提取 Assets :预编译

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

关于ruby-on-rails - 在生产中重新编译 Sass Assets ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9740166/

相关文章:

css - 如何将主 .scss 文件加载到 Webpack 3.6~ 和 React

css - css中从左上角到右下角的渐变背景颜色

css - 在 Compass 中使用数据 URI 的新 Bulletproof @font-face 语法

ruby-on-rails - 在 Rails after_save 回调中,提交是否已完成并且 Sidekiq 作业是否可以访问更改

ruby-on-rails - 隐藏基于 bool 值的键值对

javascript - AngularJS 在 django 中开始加载部分而不是在需要时加载?

ruby-on-rails - 如何通过 token 身份验证从 Faraday 获取请求的响应?

css - 如何使用 SASS 变量来计算数字?

css - sass --watch : Compile only 1 css with many sources

sass - SCSS - 用另一个 @extend 覆盖 @extend