Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/amazon-s3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby AWS将提供CSS图像Sinatra_Ruby_Amazon S3_Sinatra_Assets - Fatal编程技术网

Ruby AWS将提供CSS图像Sinatra

Ruby AWS将提供CSS图像Sinatra,ruby,amazon-s3,sinatra,assets,Ruby,Amazon S3,Sinatra,Assets,我正在使用asset_sync gem将我的资产同步到S3存储桶。在生产中我想使用S3,在开发中我想使用我的本地文件。因此,我设置了以下内容以及一个助手 环境/发展.rb configure :development do set :asset_host, "/" end 环境/生产.rb configure :production do set :asset_host, "https://s3-eu-west-1.amazonaws.com/#{ENV['FOG_DIRECTO

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

环境/发展.rb

configure :development do 
  set :asset_host, "/" 
end
环境/生产.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;
}
标题{
背景:#ffffff url('')repeat-x;
}
那我该怎么办?以前有人这样做过吗

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

3种方法浮现在脑海中

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


编辑:

从空中升起并扭曲

差不多吧


创建一条路线,然后编译资源 这类似于在Sinatra中使用SASS模板的方式(如果您不预编译它们的话)。只需执行与上面相同的操作,为
main.css
设置路由,通过erb运行
main.css.erb
模板并提供服务。添加许多


编辑:



我开始写作,但我记不起第三句:)为我辩护,我头痛得厉害。也许其他人会记得我。

谢谢你的回答,我想知道你是否有时间解释一下为什么创建main.css.erb文件,然后通过erb生成main.css,这里发生了什么?这是否意味着我可以在css文件中使用?我似乎在与这个概念作斗争。thanks@Richlewis没问题,我们都去过。只需将文件视为文本,没有特殊属性,并且每次通过过滤器时都会将其传递。每个过滤器只会转换它所知道的,它可能会留下其余的。例如markdown,它会将找到的任何markdown转换为HTML,并保留它认为是HTML的任何内容。对于ERB也是一样,它只是转换它所知道的,剩下的将有望是有效的CSS。你可以链接很多过滤器,如果你小心的话,它们都可以很好的交互。所以是的,试试
,看看它是否有效。@Richlewis我已经更新了答案。这些路径可能不正确,但你明白了。
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
get "/assets/stylesheets/main.css" do
  # remember to look at caching
  erb :"stylesheets/main.css"
end