【问题标题】:AWS to serve CSS images SinatraAWS 提供 CSS 图像 Sinatra
【发布时间】:2013-06-19 17:56:37
【问题描述】:

我正在使用 assets_sync gem 将我的资产同步到 S3 存储桶。在生产中我想使用 S3,在开发中我想使用我的本地文件。所以我已经设置了以下以及一个助手

environments/development.rb

configure :development do 
  set :asset_host, "/" 
end

environments/production.rb

configure :production do 
  set :asset_host, "https://s3-eu-west-1.amazonaws.com/#{ENV['FOG_DIRECTORY']}" 
end

帮手

helpers do
  def aws_asset( path )
    File.join settings.asset_host, path
  end
end

所以在我看来我可以做到这一点

<%= image_tag( aws_asset "/assets/images/wd.png") %>

如果在开发中,这将导致从我的本地资产中渲染该图像,或者在生产中时从我的存储桶中渲染该图像

如果我想从我的 main.css 文件中渲染一个图像,比如背景图像,该怎么办?例如,我不能执行以下操作,因为它不是 erb 文件

main.css

header{
   background: #ffffff url('<%= aws_asset("/assets/images/bgwRpeat.png") %>') repeat-x;
}

那我该怎么办?有没有人这样做过

感谢任何人提供的任何帮助

【问题讨论】:

    标签: ruby amazon-s3 sinatra assets


    【解决方案1】:

    想到了 3 种方法。

    预编译资产

    在部署之前,预编译资产和 CSS。如果您创建一个名为main.css.erb 的文件,然后通过ERB 运行它以生成main.css,那么它里面就会包含正确的内容。这将是我的偏好。预编译的方法有很多,我更喜欢Guard 但YMMV。


    编辑:

    Guard::Erb docs上吊起来扭来扭去

    guard 'erb', :input => 'app/views/stylesheets/main.css.erb', :output => "public/assets/stylesheets/main.css" do
      watch (%r{app/views/stylesheets/main.css.erb})
    end
    

    类似的东西。


    创建一个路由,然后编译资产

    这类似于您在 Sinatra 中使用 SASS 模板的方式(如果您不预编译它们)。只需和上面一样,为main.css设置一个路由,通过ERB运行main.css.erb模板并提供它。添加大量caching


    编辑:

    get "/assets/stylesheets/main.css" do
      # remember to look at caching
      erb :"stylesheets/main.css"
    end
    

    我开始写作,但我不记得第三个 :) 在我的辩护中,我头疼得厉害。也许其他人会为我记住。

    【讨论】:

    • 感谢您的回答,我想知道您是否有时间解释为什么创建一个 main.css.erb 文件然后通过 erb 运行以生成 main.css 作品,这里发生了什么?这是否意味着我可以在我的 css 文件中使用 ?我似乎在为这个概念而苦苦挣扎。谢谢
    • @Richlewis 没有问题,我们都去过那里。只需将文件视为文本,没有特殊属性,并且每次通过过滤器传递它。每个过滤器只会转换它所知道的,它可能会留下其余的。一个例子是markdown,它会将它找到的任何markdown转换成HTML,并留下它认为是HTML的任何东西。 ERB 也是如此,它只会转换它所知道的,剩下的希望是有效的 CSS。您可以链接许多过滤器,如果您小心,它们都会很好地交互。所以是的,试试&lt;%= aws_asset("/assets/images/bgwRpeat.png") %&gt; 看看它是否有效。
    • @Richlewis 我已经更新了答案。路径可能不正确,但您明白了。
    猜你喜欢
    • 2011-03-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多