我可以脱离 Rails 资产管道吗?
Posted
技术标签:
【中文标题】我可以脱离 Rails 资产管道吗?【英文标题】:Can I break away from rails asset pipeline? 【发布时间】:2017-05-12 20:35:51 【问题描述】:在我的 Rails webapp 中,我想要一个仅从特定 css/scss 文件中获取其 css 的视图。我在这里尝试了几种建议的解决方案,但都没有用。
但是,我能否将 example.css.scss 文件放在 assets/stylesheets 目录之外,并将视图文件 example.html.erb 限制为 example.css.scss 样式,仅适用于 example.html.erb ?
据我了解,通过阅读rails asset pipeline myapp/app/assets 目录中的所有文件从 application.css 文件以及生成控制器时相应的 css 文件继承其 css 规则,创建视图文件 css文件等。
我使用 Ruby on Rails 创建了一个 web 应用程序。该应用程序几乎完成并已上演。我有一个想法,那就是登录页面将是 web 应用的一个很好的开场白。
我的目标是为 webapp 创建一个登录页面。登陆页面包含一个带有以文本为中心的链接的背景图片,我想将其链接到 webapp 的主页,并且不接收来自 application.css 文件的任何样式。
基本上我希望这个视图文件与 application.css 文件无关。
提前致谢。
【问题讨论】:
我的目标是为我的应用创建一个登录页面。 - 为什么需要一个登录页面框架? @Mr.Alien 除非框架适用于应用程序 @alexanderbird 是的,除非是为了应用程序 我不确定我是否理解这个问题。我已经使用 Ruby on Rails 创建了一个 Web 应用程序。该应用程序几乎完成并已上演。我有一个想法,登陆页面将是网站的一个很好的开场白。很抱歉,我相信我只是说“我的应用程序”就让你失望了。我应该说网站/应用程序。 @charlie.brown 将这几句话添加到您的问题中。这将使其他用户更容易理解您的意思。 【参考方案1】:虽然可能有理由使用不属于资产管道的完全不同的 css 文件(例如,在 rails 重新启动时登录页面工作,保持登录页面轻量级等),但我猜你更有动力通过让某事工作。
我假设您的大多数应用都有会与着陆页冲突的样式,因此如果应用中的样式也适用于着陆页,则着陆页看起来很有趣,反之亦然。所以我的猜测是,您正在寻找一种方法让某些样式应用于应用程序,而其他样式应用于登录页面。
为此,我首先会绕过您的常规布局 - 请参阅 bypass application.html.erb in Rails app
然后,我会更新您的常规布局,以某种方式表明它是应用程序而不是登录页面。有很多方法可以做到这一点,但我可能会这样做:
application.html.erb:
<body class='app'><!-- etc. -->
landing_page.html.erb:
<body class='landing_page'><!-- etc. -->
然后,在你的 scss 文件中,更新它:
application.css.scss:
body.app
/* All your regular app styles */
body.landing_page
/* All your landing page styles */
当然你可以把它们分成多个文件,等等。
TL;DR 除非您遇到加载时间问题,或者您有其他原因确实不希望为登录页面加载应用程序样式,否则只需将它们放在一起,但要确定样式的范围,以便它们在应用时不适用不应该。
【讨论】:
【参考方案2】:您已经在 Rails 域中工作,因此继续留在该域中可能会更容易。
在我看来,最好/最简单的做法是创建一个受欢迎的控制器。在控制器中创建一个空索引操作和该操作的视图。您正在创建的视图看起来相当简单,因此您只需在类/id 名称(看起来并不多)前加上 welcome_,这将使它们与您的普通类/id 名称区分开来。主页文本的链接将指向该特定控制器的索引操作。
然后你可以在你的 routes.rb 文件中创建根路由指向welcome#index。
【讨论】:
我不确定我是否理解。如果我通过 rails g controller welcome index 创建一个控制器,这将绑定welcome.css.scss 以继承application.css 样式规则。我需要登录页面完全独立于 myapp/app/assets/stylesheets 和 application.css 文件中的文件。您认为我可以在资产目录之外创建 css 文件 example.css,然后在视图文件中将其指向 example.css 文件吗? 您是否有理由需要让登录页面样式表独立于应用程序样式表?还是仅仅是为了让 css 规则不冲突? 这个问题的具体原因是我不希望 application.css 中的 css 影响着陆页。以上是关于我可以脱离 Rails 资产管道吗?的主要内容,如果未能解决你的问题,请参考以下文章