0

ユースケース: Rails 4.rc1 アプリを Heroku にプッシュし、アセットの事前コンパイルを行ってから、asset_sync gem を使用して S3 に配置します。config で S3 の asset_host を設定しています。

この後、スラッグのコンパイル中に、フィンガープリント化されたアセット URL を Redis にダンプして、他の Heroku アプリがそれを表示し (同じ Redis db を共有している)、同じアセット ファイルを使用できるようにしたいと考えています。基本的に:

//s3.amazonaws.com/my_bucket/assets/desktop-(fingerprint).css

明らかに、指紋はデプロイ間で変更され、他のアプリは更新された URL を必要とします。

これが私の最初の試みです:

module AssetShare
  class << self
    def capture_urls
      action_controller = ActionController::Base.new
      REDIS.set('desktop_css_url',action_controller.view_context.stylesheet_url('desktop'))
      REDIS.set('mobile_css_url',action_controller.view_context.stylesheet_url('mobile'))
    end
  end
end

desc 'Capture asset pipeline stylesheet and javascript URLS to Redis'
task 'assets:capture_urls' => :environment do
  AssetShare.capture_urls
end

# stolen from asset_sync
if Rake::Task.task_defined?("assets:precompile:nondigest")
  Rake::Task["assets:precompile:nondigest"].enhance do
    AssetShare.capture_urls
  end
else
  Rake::Task["assets:precompile"].enhance do
    AssetShare.capture_urls
  end
end

これは捨てられました:

//s3.amazonaws.com/my_bucket/stylesheets/desktop.css

次に、このリソースを見つけましたが、Sprockets は Rails 4 で変更されました: http://blog.noizeramp.com/2011/10/14/asset-urls-and-paths-in-rake-tasks/

これが私の2回目の試みです:

desc 'Capture asset pipeline stylesheet and javascript URLS to Redis'
task 'assets:capture_urls' => :environment do
  MyApp::Application.configure do
    config.assets.debug = false
    config.assets.digest = true
  end

  include ActionView::Helpers::AssetTagHelper

  desktop_url = stylesheet_url('desktop', only_path: false)
  REDIS.set('desktop_css_url', desktop_url)
  puts "Saved desktop url to Redis for Store Rails app: #{desktop_url}"

  mobile_url = stylesheet_url('mobile', only_path: false)
  REDIS.set('mobile_css_url', mobile_url)
  puts "Saved mobile url to Redis for Store Rails app: #{mobile_url}"
end

# stolen from asset_sync
if Rake::Task.task_defined?("assets:precompile:nondigest")
  Rake::Task["assets:precompile:nondigest"].enhance do
    Rake::Task["assets:capture_urls"].invoke
  end
else
  Rake::Task["assets:precompile"].enhance do
    Rake::Task["assets:capture_urls"].invoke
  end
end

これだけが捨てられました:

/stylesheets/desktop.css

明らかに、それを近づける最初の試み。フィンガープリントのURLをダンプすることはできません。heroku ツールキットを介して rake タスクを実行すると、正しいフィンガープリントの URL が出力されます。考え?

4

1 に答える 1