사용 사례 : Heroku에 내 Rails 4.rc1 앱을 푸시하고 자산 사전 컴파일을 수행 한 다음 asset_sync gem을 사용하여 S3에 저장하십시오. 구성에서 S3에 대해 asset_host를 설정했습니다.Heroku Slug 컴파일에서 Rake 작업의 자산 파이프 라인 URL을 가져옵니다.
슬러그 컴파일 중 다른 지형도 작성 점의 앱에서 볼 수 있도록 지문이 새겨진 애셋 URL을 Redis에 덤프하고 동일한 애셋 파일을 사용하고 싶습니다. 본질적으로 :
//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
가 그럼 난이 자원을 찾았지만, 톱니 레일 4에서 변경되었습니다
http://blog.noizeramp.com/2011/10/14/asset-urls-and-paths-in-rake-tasks/가 여기 내 두 번째 시도이다
:
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
(210)
이 단지 밖으로 덤프 : 분명히
/stylesheets/desktop.css
첫 번째 시도 그것을 가까이. 나는 지문이 찍힌 URL을 덤프 할 수 없다. heroku 툴킷을 통해 레이크 작업을 실행하면 올바른 지문 URL이 인쇄됩니다. 생각?
desc 'Capture asset pipeline stylesheet and javascript URLS to Redis'
task 'assets:urls:capture' => :environment do
# unfortunately, this way doesn't work when deploying
#controller = MyApp::Application::ApplicationController.new
#desktop_url = controller.view_context.stylesheet_url('desktop')
#mobile_url = controller.view_context.stylesheet_url('mobile')
desktop_url = MyApp::Application.config.action_controller.asset_host
desktop_url += "/" + AssetSync.storage.get_remote_files.select{|d| d.include?('desktop') && d.include?('.css') }.first
REDIS.set('desktop_css_url', desktop_url)
puts "Saved desktop url to Redis for Store Rails app: #{desktop_url}"
mobile_url = MyApp::Application.config.action_controller.asset_host
mobile_url += "/" + AssetSync.storage.get_remote_files.select{|d| d.include?('mobile') && d.include?('.css') }.first
REDIS.set('mobile_css_url', mobile_url)
puts "Saved mobile url to Redis for Store Rails app: #{mobile_url}"
end
desc 'Clear asset pipeline stylesheet and javascript URLS from Redis'
task 'assets:urls:clear' => :environment do
REDIS.del('desktop_css_url')
puts "Cleared desktop url from Redis"
REDIS.del('mobile_css_url')
puts "Cleared mobile url from Redis"
end
# stolen from asset_sync
if Rake::Task.task_defined?("assets:precompile:nondigest")
Rake::Task["assets:precompile:nondigest"].enhance do
Rake::Task["assets:urls:capture"].invoke
#Rake::Task["assets:urls:clear"].invoke
end
else
Rake::Task["assets:precompile"].enhance do
Rake::Task["assets:urls:capture"].invoke
#Rake::Task["assets:urls:clear"].invoke
end
end
내가 올바른 지문 URL을 결코 할 수는 Heroku가에 배포 중에 덤프되는 :