0

asset_sync gem を使用してアセットを S3 バケットに同期しています。本番環境では S3 を使用し、開発環境ではローカル ファイルを使用したいと考えています。だから私はヘルパーと一緒に以下をセットアップしました

環境/開発.rb

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

環境/ 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;
}

それで、なにかお手伝いできますか?誰かが前にこれをやったことがありますか

誰でも提供できるヘルプをありがとう

4

1 に答える 1

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 テンプレートを使用する方法と似ています (プリコンパイルしない場合)。上記と同じことを行い、 のルートを設定し、ERB を介しmain.cssてテンプレートを実行し、それを提供します。多くのキャッシングmain.css.erbを追加します。


編集:

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

私は書き始めましたが、3番目を思い出せません:)私の弁護では、私はひどい頭痛があります。おそらく、他の誰かが私を覚えているでしょう。

于 2013-06-23T15:38:40.330 に答える