BUGFIX: Don't resolve oneboxes when cooking

Defer to post save job
This commit is contained in:
Sam 2014-03-18 13:12:58 +11:00
parent 24667cedee
commit 00a46253ae
2 changed files with 26 additions and 13 deletions

View File

@ -11,18 +11,9 @@ class PostAnalyzer
def cook(*args) def cook(*args)
cooked = PrettyText.cook(*args) cooked = PrettyText.cook(*args)
# cook all oneboxes, in the past we used to defer this
# for some reason we decided to do this inline now
# TODO: discuss on http://meta.discourse.org what the correct thing is to do
# keep in mind some oneboxes may take a long time to build
result = Oneboxer.apply(cooked) do |url, elem| result = Oneboxer.apply(cooked) do |url, elem|
Oneboxer.invalidate(url) if args.last[:invalidate_oneboxes] Oneboxer.invalidate(url) if args.last[:invalidate_oneboxes]
begin Oneboxer.cached_onebox url
Oneboxer.onebox url
rescue => e
Rails.logger.warn("Failed to cook onebox: #{e.message} #{e.backtrace}")
nil
end
end end
cooked = result.to_html if result.changed? cooked = result.to_html if result.changed?

View File

@ -22,13 +22,24 @@ module Oneboxer
def self.preview(url, options=nil) def self.preview(url, options=nil)
options ||= {} options ||= {}
Oneboxer.invalidate(url) if options[:invalidate_oneboxes] Oneboxer.invalidate(url) if options[:invalidate_oneboxes]
Onebox.preview(url, cache: Rails.cache).placeholder_html onebox_raw(url).placeholder_html
end end
def self.onebox(url, options=nil) def self.onebox(url, options=nil)
options ||= {} options ||= {}
Oneboxer.invalidate(url) if options[:invalidate_oneboxes] Oneboxer.invalidate(url) if options[:invalidate_oneboxes]
Onebox.preview(url, cache: Rails.cache).to_s onebox_raw(url).to_s
end
def self.cached_onebox(url)
Rails.cache.read(onebox_cache_key(url))
.to_s
end
def self.cached_preview(url)
Rails.cache.read(onebox_cache_key(url))
.try(:placeholder_html)
.to_s
end end
def self.oneboxer_exists_for_url?(url) def self.oneboxer_exists_for_url?(url)
@ -36,7 +47,7 @@ module Oneboxer
end end
def self.invalidate(url) def self.invalidate(url)
Rails.cache.delete(url) Rails.cache.delete(onebox_cache_key(url))
end end
# Parse URLs out of HTML, returning the document when finished. # Parse URLs out of HTML, returning the document when finished.
@ -82,5 +93,16 @@ module Oneboxer
Result.new(doc, changed) Result.new(doc, changed)
end end
private
def self.onebox_cache_key(url)
"onebox_#{url}"
end
def self.onebox_raw(url)
Rails.cache.fetch(onebox_cache_key(url)){
Onebox.preview(url, cache: {})
}
end
end end