【问题标题】:how to include stylesheet in root folder of rails 3如何在rails 3的根文件夹中包含样式表
【发布时间】:2011-04-04 23:31:12
【问题描述】:

由于 rails 3 和 compass 框架存在一些 heroku 问题,我们遵循了以下指南:

http://lds.li/post/673242899/compass-with-rails-3-on-heroku

并将我们的样式表移动到 app_name/tmp/stylesheets。

我尝试过使用

stylesheet_link_tag "#{Rails.root}/tmp/stylesheets/main.css"

但这不起作用,因为它在中查找 css 文件

http://localhost:3000/app_name/tmp/stylesheets/main.css

我知道这是一个简单的解决方法,但我忽略了一些简单的问题,但希望有人能一眼就回答这个问题。提前致谢!

我想指出,我们的 stylesheets.rb 中有这个

Rails.configuration.middleware.insert_before('Rack::Sendfile', 'Rack::Static',
                                         :urls => ['/stylesheets/compiled'],
                                         :root => "#{Rails.root}/tmp")

当我尝试“compass watch”时,它仍然编译为“tmp/stylesheets/main.css”,而不是 stylesheets/compiled。

【问题讨论】:

    标签: ruby-on-rails-3 heroku stylesheet sass compass-sass


    【解决方案1】:

    我个人采取了不同的方法来解决这个问题:

    将以下代码粘贴到您的指南针初始化程序中:

    Sass::Plugin.options[:never_update] = true
    

    这可以防止 sass 在服务器受到攻击时尝试写入文件系统。

    只需确保您在开发模式下运行 compass watch 并将编译后的样式表提交到您的 git repo

    这样可以节省很多时间 - 如果您不喜欢这种方法,请尝试 hasslerecent forks 之一

    【讨论】:

    • 这是哪个指南针初始化程序?初始化器中的那个还是配置中的那个?
    • 最简单的方法是将其粘贴到 initializers/compass.rb like so - 请注意我使用的是 compass-0.10.5,其中初始化文件的格式与以前的版本略有不同)。一个更好的解决方案(和一个advised by the guy who wrote Sass)是保留initializers/compass.rb 原样,并将following code 放入您的config.ru 文件(rails3 应用程序根目录下的机架文件)。我认为机架方法可能会更好,但两者都可以正常工作
    【解决方案2】:

    将您的config/compass.rb 更改为设置css_dir = "tmp/stylesheets/compiled"

    根据您的配置,您应该将其用于您的模板:

    stylesheet_link_tag "compiled/main.css"

    (呈现<link rel="/stylesheets/compiled/main.css" ...

    tmp 目录在 public 之外;它不应出现在 URL 中,因为中间件正在处理重新映射它。)

    【讨论】:

    • 它最初是compiled/main.css,但rails一直在寻找public/stylesheets/compiled目录而不是app_name/tmp/stylesheets。我认为中间件没有为我重定向?我该如何检查?
    • 你能解释一下“rails 一直在寻找”是什么意思吗?这里有两个问题:第一,sass是否被编译成tmp/stylesheets/compiled/*.css?其次,该文件夹是否作为 /stylesheets/ 通过 http 编译,就好像它在 /public 中一样?
    • sass 正在编译为 app_root/tmp/stylesheets/compiled/*.css,我使用你说的 link_tag 包含了样式表。当我查看生成页面的源代码时,它会查找 localhost:3000/stylesheets/compiled/main.css,就好像它仍在查看 public(我对 css 所做的更改在 tmp 中,所以当我刷新时我没有看到任何新样式)
    • 那么这部分是正确的:它应该面向公众。我找不到任何有关 middleware.insert_before 选项的文档,但是 应该 发布您在 /tmp 中的内容,就好像它是公共路径一样。我会再看一遍并回复你。
    猜你喜欢
    • 1970-01-01
    • 2022-11-29
    • 1970-01-01
    • 2013-06-10
    • 1970-01-01
    • 1970-01-01
    • 2012-08-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多