从 Rails 应用程序的数据库中提取 CSS 资产(如背景图像)?

Posted

技术标签:

【中文标题】从 Rails 应用程序的数据库中提取 CSS 资产(如背景图像)?【英文标题】:Pulling CSS assets (like background images) from the database in a Rails app? 【发布时间】:2011-09-15 14:36:54 【问题描述】:

我想知道是否有办法将 CSS 资产路径(如背景图像)存储在数据库中,以便无需访问或重写代码即可对其进行自定义。我查看了一些模板引擎like liquid,但认为它们对于我想做的事情来说太过分了。我只希望在同一应用程序代码库的各种部署之间的视图中进行一点点自定义,而不是针对各种用户。

我对 Rails 3.1 的了解不多,但据我了解,CSS 资产已编译并且不再是静态的,所以——这是否意味着我可以在 rails 3.1 中的 CSS 中编写类似的东西从数据库中提取?我通常部署到 Heroku,但不确定他们是否支持 3.1。

谁有更好的策略或想法?

【问题讨论】:

【参考方案1】:

在数据库中存储像图像这样的二进制文件很快就会变得很麻烦。曾经有一段时间我们在数据库中存储用户上传的 PDF 等文件,但它变得无法管理。我们迅速将其全部转移到 S3 并让 Paperclip 在那里存储和检索文件(在将文件保存到 S3 之前加密文件,并通过 SSL 发送它们,因为这些文件可能很敏感),这让事情变得更加理智。

我想说对你来说最好的选择是使用 S3。自从

    在 heroku 上你有一个有限的 数据库大小(取决于您的 计划),如果 您正在那里存储二进制文件。 您不能动态保存新文件 到 heroku 上的文件系统,以及 S3 非常便宜(而且免费 最随意使用)来存储和 检索文件。

根据您的评论进行编辑:

好的,我误解了这个问题。要么将图像路径存储在数据库中,要么将图像存储为这样的路径和命名约定,代码本身可以找出从哪里获取图像(这是回形针所做的)。两种方式都可以接受。请注意,SASS 并不是真正动态的,您不能从数据库中提取路径并即时更改 sass。我遇到了类似的情况,解决方案是让 CSS 指向一个 background-image,它实际上是应用程序中的一个路由。在我们的实例中,我们能够根据传入用户的子域或域更改显示的图像,但您也可以根据在视图呈现之前设置的会话 cookie 轻松显示该图像。

编译 SASS 时,生成后它是静态的。它的语法和“动态”特性只是为了让编写 CSS 更容易。

【讨论】:

我应该更清楚......我的意思是将图像路径存储在数据库中,以便可以动态地将其拉入 CSS 中。不将图像本身存储在数据库中。 @Final 我根据这些信息添加了一些额外的 cmets:p 抱歉造成误解!【参考方案2】:

使用 S3(Paperclip) + “css assets”表/模型之类的东西怎么样?

这样,在“管理”页面中,您可以提取所有可能的 CSS 资源,允许某人选择新资源,甚至可以将新图像上传到 s3。这意味着您不必实际重写任何代码,只需拥有一个管理员门户,他们可以在其中选择可能的图像。

【讨论】:

您是否必须在实际的模板文件中包含 CSS,或者您可以在视图的样式表中使用实例变量? 好吧,因为您只是存储图像路径(而不是实际图像),您可以从数据库中提取它并将其存储在实例变量中,然后在视图中使用 jQuery + 该实例变量来设置背景图像 CSS 属性。

以上是关于从 Rails 应用程序的数据库中提取 CSS 资产(如背景图像)?的主要内容,如果未能解决你的问题,请参考以下文章

Rails 4图像未在heroku上加载

无法从 Rails 应用程序中的 JS 访问 CSS

Rails:内联 CSS 从数据库条目中检索样式

如何使用 Ruby on Rails 5 将数据从 URL 提取到表单中

rails - 在生产模式下找不到 application.css 资产

将外部 CSS 转换为内联 CSS 用于 Rails 中的邮件