effective_assets 0.1 → 1.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/MIT-LICENSE +1 -1
- data/README.md +341 -72
- data/app/assets/javascripts/effective/snippets/effective_asset.js.coffee +53 -0
- data/app/assets/javascripts/effective_assets.js +4 -0
- data/app/assets/javascripts/effective_assets/asset_box.js.coffee +36 -0
- data/app/assets/javascripts/effective_assets/asset_box_dialog.js.coffee +49 -0
- data/app/assets/javascripts/effective_assets/asset_box_drag_and_drop.js.coffee +2 -0
- data/app/assets/javascripts/effective_assets/asset_box_filtering.js.coffee +16 -0
- data/app/assets/javascripts/effective_assets/asset_box_sorting.js.coffee +8 -0
- data/app/assets/javascripts/effective_assets/jquery_ui_sortable.js +813 -585
- data/app/assets/javascripts/effective_assets/s3_uploader.js.coffee +268 -0
- data/app/assets/javascripts/effective_assets_iframe.js.coffee +28 -0
- data/app/assets/stylesheets/active_admin/effective_assets.css.scss +57 -0
- data/app/assets/stylesheets/effective_assets/_asset_box_input.scss +54 -175
- data/app/assets/stylesheets/effective_assets/_iframe_bootstrap.scss +1714 -0
- data/app/assets/stylesheets/effective_assets/_input_bootstrap.scss +508 -0
- data/app/assets/stylesheets/effective_assets_iframe.css.scss +23 -0
- data/app/controllers/effective/assets_controller.rb +41 -0
- data/app/controllers/effective/s3_uploads_controller.rb +58 -74
- data/app/helpers/effective_assets_helper.rb +30 -14
- data/app/helpers/effective_assets_s3_helper.rb +69 -0
- data/app/models/concerns/acts_as_asset_box.rb +75 -11
- data/app/models/effective/access_denied.rb +17 -0
- data/app/models/effective/asset.rb +130 -93
- data/app/models/effective/attachment.rb +2 -7
- data/app/models/effective/delayed_job.rb +33 -78
- data/app/models/effective/snippets/effective_asset.rb +19 -0
- data/app/models/effective/user_uploads.rb +19 -0
- data/app/models/inputs/asset_box.rb +154 -0
- data/app/models/inputs/asset_box_form_input.rb +7 -0
- data/app/models/inputs/asset_box_formtastic_input.rb +9 -0
- data/app/models/inputs/asset_box_input.rb +13 -82
- data/app/models/inputs/asset_box_simple_form_input.rb +7 -0
- data/app/uploaders/effective_assets_uploader.rb +14 -2
- data/app/uploaders/{asset_uploader.rb → test_asset_uploader.rb} +1 -1
- data/app/views/active_admin/effective_assets/_edit.html.haml +3 -3
- data/app/views/active_admin/effective_assets/_new.html.haml +2 -1
- data/app/views/asset_box_input/_attachment_as_list.html.haml +17 -0
- data/app/views/asset_box_input/_attachment_as_table.html.haml +32 -0
- data/app/views/asset_box_input/_attachment_as_thumbnail.html.haml +20 -0
- data/app/views/asset_box_input/_dialog.html.haml +18 -0
- data/app/views/asset_box_input/_progress_bar_template.html.haml +8 -0
- data/app/views/asset_box_input/_uploader.html.haml +21 -115
- data/app/views/effective/assets/iframe.html.haml +17 -0
- data/app/views/effective/snippets/_effective_asset.html.haml +8 -0
- data/config/routes.rb +8 -2
- data/db/migrate/01_create_effective_assets.rb.erb +3 -0
- data/lib/effective_assets.rb +34 -3
- data/lib/effective_assets/engine.rb +11 -8
- data/lib/effective_assets/version.rb +1 -1
- data/lib/generators/templates/asset_uploader.rb +35 -0
- data/lib/generators/templates/effective_assets.rb +31 -4
- data/lib/tasks/effective_assets_tasks.rake +115 -4
- data/spec/internal/config/database.yml +3 -0
- data/spec/internal/config/initializers/effective_assets.rb +18 -0
- data/spec/internal/config/routes.rb +3 -0
- data/spec/internal/db/combustion_test.sqlite +0 -0
- data/spec/internal/db/schema.rb +52 -0
- data/spec/internal/log/test.log +793 -0
- data/spec/{dummy → internal}/public/favicon.ico +0 -0
- data/spec/internal/public/sprites.png +0 -0
- data/spec/models/asset_spec.rb +119 -35
- data/spec/spec_helper.rb +9 -3
- metadata +95 -234
- data/app/assets/images/effective_assets/s3_down_button.gif +0 -0
- data/app/assets/images/effective_assets/s3_over_button.gif +0 -0
- data/app/assets/images/effective_assets/s3_up_button.gif +0 -0
- data/app/assets/images/effective_assets/s3_upload.swf +0 -0
- data/app/assets/javascripts/effective_assets/asset_box_input.js.coffee +0 -71
- data/app/assets/javascripts/effective_assets/asset_box_uploader.js +0 -122
- data/app/assets/javascripts/effective_assets/asset_box_uploader_customization.js +0 -166
- data/app/controllers/effective/attachments_controller.rb +0 -14
- data/app/views/asset_box_input/_attachment_fields.html.haml +0 -14
- data/spec/dummy/README.rdoc +0 -261
- data/spec/dummy/Rakefile +0 -7
- data/spec/dummy/app/assets/javascripts/application.js +0 -15
- data/spec/dummy/app/assets/stylesheets/application.css +0 -13
- data/spec/dummy/app/controllers/application_controller.rb +0 -3
- data/spec/dummy/app/helpers/application_helper.rb +0 -2
- data/spec/dummy/app/views/layouts/application.html.erb +0 -14
- data/spec/dummy/config.ru +0 -4
- data/spec/dummy/config/application.rb +0 -65
- data/spec/dummy/config/boot.rb +0 -10
- data/spec/dummy/config/database.yml +0 -25
- data/spec/dummy/config/environment.rb +0 -5
- data/spec/dummy/config/environments/development.rb +0 -37
- data/spec/dummy/config/environments/production.rb +0 -67
- data/spec/dummy/config/environments/test.rb +0 -37
- data/spec/dummy/config/initializers/backtrace_silencers.rb +0 -7
- data/spec/dummy/config/initializers/inflections.rb +0 -15
- data/spec/dummy/config/initializers/mime_types.rb +0 -5
- data/spec/dummy/config/initializers/secret_token.rb +0 -7
- data/spec/dummy/config/initializers/session_store.rb +0 -8
- data/spec/dummy/config/initializers/wrap_parameters.rb +0 -14
- data/spec/dummy/config/locales/en.yml +0 -5
- data/spec/dummy/config/routes.rb +0 -58
- data/spec/dummy/db/development.sqlite3 +0 -0
- data/spec/dummy/db/schema.rb +0 -16
- data/spec/dummy/db/test.sqlite3 +0 -0
- data/spec/dummy/log/development.log +0 -71
- data/spec/dummy/log/test.log +0 -33
- data/spec/dummy/public/404.html +0 -26
- data/spec/dummy/public/422.html +0 -26
- data/spec/dummy/public/500.html +0 -25
- data/spec/dummy/script/rails +0 -6
- data/spec/dummy/spec_link +0 -3
@@ -0,0 +1,17 @@
|
|
1
|
+
unless defined?(Effective::AccessDenied)
|
2
|
+
module Effective
|
3
|
+
class AccessDenied < StandardError
|
4
|
+
attr_reader :action, :subject
|
5
|
+
|
6
|
+
def initialize(message = nil, action = nil, subject = nil)
|
7
|
+
@message = message
|
8
|
+
@action = action
|
9
|
+
@subject = subject
|
10
|
+
end
|
11
|
+
|
12
|
+
def to_s
|
13
|
+
@message || I18n.t(:'unauthorized.default', :default => 'Access Denied')
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
@@ -21,12 +21,16 @@ module Effective
|
|
21
21
|
|
22
22
|
structure do
|
23
23
|
title :string
|
24
|
+
|
24
25
|
description :text
|
25
26
|
tags :string
|
27
|
+
extra :text
|
26
28
|
|
27
29
|
content_type :string, :validates => [:presence]
|
28
|
-
upload_file :string # The full url of the file, as originally uploaded
|
30
|
+
upload_file :string, :validates => [:presence] # The full url of the file, as originally uploaded
|
31
|
+
|
29
32
|
processed :boolean, :default => false
|
33
|
+
aws_acl :string, :default => 'public-read', :validates => [:presence, :inclusion => {:in => ['public-read', 'authenticated-read']}]
|
30
34
|
|
31
35
|
data :string
|
32
36
|
|
@@ -40,26 +44,29 @@ module Effective
|
|
40
44
|
end
|
41
45
|
|
42
46
|
serialize :versions_info, Hash
|
47
|
+
serialize :extra, Hash
|
43
48
|
|
44
|
-
|
45
|
-
#validates_presence_of :user_id
|
46
|
-
|
49
|
+
before_validation :set_content_type
|
47
50
|
before_save :update_asset_dimensions
|
51
|
+
after_save :enqueue_delayed_job
|
48
52
|
|
49
|
-
default_scope order(
|
53
|
+
default_scope -> { order(:id) }
|
54
|
+
scope :nonplaceholder, -> { where("#{EffectiveAssets.assets_table_name}.upload_file != ?", 'placeholder') }
|
50
55
|
|
51
|
-
scope :images, -> { where(
|
52
|
-
scope :
|
53
|
-
scope :audio, -> { where('content_type LIKE ?', '%audio%') }
|
54
|
-
scope :files, -> { where('(content_type NOT LIKE ?) AND (content_type NOT LIKE ?) AND (content_type NOT LIKE ?)', '%image%', '%video%', '%audio%') }
|
56
|
+
scope :images, -> { nonplaceholder().where("#{EffectiveAssets.assets_table_name}.content_type LIKE ?", '%image%') }
|
57
|
+
scope :nonimages, -> { nonplaceholder().where("(#{EffectiveAssets.assets_table_name}.content_type NOT LIKE ?)", '%image%') }
|
55
58
|
|
56
|
-
scope :
|
57
|
-
scope :
|
58
|
-
scope :
|
59
|
+
scope :videos, -> { nonplaceholder().where("#{EffectiveAssets.assets_table_name}.content_type LIKE ?", '%video%') }
|
60
|
+
scope :audio, -> { nonplaceholder().where("#{EffectiveAssets.assets_table_name}.content_type LIKE ?", '%audio%') }
|
61
|
+
scope :files, -> { nonplaceholder().where("(#{EffectiveAssets.assets_table_name}.content_type NOT LIKE ?) AND (#{EffectiveAssets.assets_table_name}.content_type NOT LIKE ?) AND (#{EffectiveAssets.assets_table_name}.content_type NOT LIKE ?)", '%image%', '%video%', '%audio%') }
|
62
|
+
|
63
|
+
scope :today, -> { nonplaceholder().where("#{EffectiveAssets.assets_table_name}.created_at >= ?", Time.zone.today.beginning_of_day) }
|
64
|
+
scope :this_week, -> { nonplaceholder().where("#{EffectiveAssets.assets_table_name}.created_at >= ?", Time.zone.today.beginning_of_week) }
|
65
|
+
scope :this_month, -> { nonplaceholder().where("#{EffectiveAssets.assets_table_name}.created_at >= ?", Time.zone.today.beginning_of_month) }
|
59
66
|
|
60
67
|
class << self
|
61
68
|
def s3_base_path
|
62
|
-
"
|
69
|
+
"https://#{EffectiveAssets.aws_bucket}.s3.amazonaws.com/"
|
63
70
|
end
|
64
71
|
|
65
72
|
def string_base_path
|
@@ -68,49 +75,22 @@ module Effective
|
|
68
75
|
|
69
76
|
# Just call me with Asset.create_from_url('http://somewhere.com/somthing.jpg')
|
70
77
|
def create_from_url(url, options = {})
|
71
|
-
opts = {:upload_file => url, :user_id => 1}.merge(options)
|
72
|
-
|
73
|
-
if (asset = Asset.create(opts))
|
74
|
-
Effective::DelayedJob.new.process_asset(asset)
|
75
|
-
asset
|
76
|
-
else
|
77
|
-
false
|
78
|
-
end
|
79
|
-
end
|
80
|
-
|
81
|
-
# We have just uploaded an asset via our s3 uploader
|
82
|
-
# We want this image to be immediately available.
|
83
|
-
def create_from_s3_uploader(url, options = {})
|
84
|
-
opts = {:upload_file => "#{Asset.s3_base_path}/#{url}", :user_id => 1}.merge(options)
|
85
|
-
|
86
|
-
asset = false
|
78
|
+
opts = {:upload_file => url, :user_id => 1, :aws_acl => EffectiveAssets.aws_acl}.merge(options)
|
87
79
|
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
directory = storage.directories.get(EffectiveAssets.aws_bucket)
|
99
|
-
directory.files.new(:key => url).destroy
|
100
|
-
|
101
|
-
asset.update_column(:upload_file, asset.url) # This is our upload file as far as CarrierWave is now concerned
|
102
|
-
|
103
|
-
Effective::DelayedJob.new.process_asset(asset)
|
104
|
-
rescue => e
|
105
|
-
Rails.logger.info e.message
|
106
|
-
Rails.logger.info e.backtrace.join('\n')
|
107
|
-
asset = false
|
80
|
+
attempts = 3 # Try to upload this string file 3 times
|
81
|
+
begin
|
82
|
+
asset = Asset.new(opts)
|
83
|
+
|
84
|
+
if asset.save
|
85
|
+
asset
|
86
|
+
else
|
87
|
+
puts asset.errors.inspect
|
88
|
+
Rails.logger.info asset.errors.inspect
|
89
|
+
false
|
108
90
|
end
|
109
|
-
|
110
|
-
|
91
|
+
rescue => e
|
92
|
+
(attempts -= 1) >= 0 ? (sleep 2; retry) : false
|
111
93
|
end
|
112
|
-
|
113
|
-
asset
|
114
94
|
end
|
115
95
|
|
116
96
|
# This loads the raw contents of a string into a file and uploads that file to s3
|
@@ -119,50 +99,56 @@ module Effective
|
|
119
99
|
def create_from_string(str, options = {})
|
120
100
|
filename = options.delete(:filename) || "file-#{Time.now.strftime('%Y-%m-%d-%H-%M-%S')}.txt"
|
121
101
|
|
122
|
-
|
102
|
+
filename = URI.escape(filename).gsub(/%\d\d|[^a-zA-Z0-9.-]/, '_') # Replace anything not A-Z, a-z, 0-9, . -
|
123
103
|
|
124
|
-
|
125
|
-
asset.data = AssetStringIO.new(filename, str)
|
104
|
+
opts = {:upload_file => "#{Asset.string_base_path}#{filename}", :user_id => 1, :aws_acl => EffectiveAssets.aws_acl}.merge(options)
|
126
105
|
|
127
|
-
|
128
|
-
|
129
|
-
asset
|
106
|
+
attempts = 3 # Try to upload this string file 3 times
|
107
|
+
begin
|
108
|
+
asset = Asset.new(opts)
|
109
|
+
asset.data = AssetStringIO.new(filename, str)
|
110
|
+
|
111
|
+
if asset.save
|
112
|
+
asset
|
113
|
+
else
|
114
|
+
puts asset.errors.inspect
|
115
|
+
Rails.logger.info asset.errors.inspect
|
116
|
+
false
|
117
|
+
end
|
118
|
+
rescue => e
|
119
|
+
(attempts -= 1) >= 0 ? (sleep 2; retry) : false
|
130
120
|
end
|
121
|
+
|
131
122
|
end
|
123
|
+
end # End of Class methods
|
124
|
+
|
125
|
+
def title
|
126
|
+
self[:title].presence || file_name
|
132
127
|
end
|
133
128
|
|
134
|
-
|
135
|
-
|
136
|
-
self.content_type = case url.to_s[-4, 4].downcase
|
137
|
-
when '.mp3' ; 'audio/mp3'
|
138
|
-
when '.mp4' ; 'video/mp4'
|
139
|
-
when '.mov' ; 'video/mov'
|
140
|
-
when '.m2v' ; 'video/m2v'
|
141
|
-
when '.m4v' ; 'video/m4v'
|
142
|
-
when '.3gp' ; 'video/3gp'
|
143
|
-
when '.3g2' ; 'video/3g2'
|
144
|
-
when '.avi' ; 'video/avi'
|
145
|
-
when '.jpg' ; 'image/jpg'
|
146
|
-
when '.gif' ; 'image/gif'
|
147
|
-
when '.png' ; 'image/png'
|
148
|
-
when '.bmp' ; 'image/bmp'
|
149
|
-
when '.ico' ; 'image/x-icon'
|
150
|
-
else ; 'unknown'
|
151
|
-
end
|
152
|
-
end
|
129
|
+
def extra
|
130
|
+
self[:extra] || {}
|
153
131
|
end
|
154
132
|
|
155
|
-
def
|
156
|
-
|
133
|
+
def url(version = nil, expire_in = nil)
|
134
|
+
aws_acl == 'authenticated-read' ? authenticated_url(version, expire_in) : public_url(version)
|
157
135
|
end
|
158
136
|
|
159
|
-
|
160
|
-
|
161
|
-
|
137
|
+
def public_url(version = nil)
|
138
|
+
if data.present?
|
139
|
+
version.present? ? data.send(version).file.url : data.file.url
|
140
|
+
else
|
141
|
+
"#{Asset.s3_base_path.chomp('/')}/#{EffectiveAssets.aws_path.chomp('/')}/#{id.to_i}/#{file_name}"
|
142
|
+
end
|
143
|
+
end
|
144
|
+
|
145
|
+
def authenticated_url(version = nil, expire_in = 60.minutes)
|
146
|
+
data.fog_authenticated_url_expiration = expire_in
|
147
|
+
version.present? ? data.send(version).file.authenticated_url : data.file.authenticated_url
|
162
148
|
end
|
163
149
|
|
164
150
|
def file_name
|
165
|
-
|
151
|
+
upload_file.to_s.split('/').last rescue upload_file
|
166
152
|
end
|
167
153
|
|
168
154
|
def video?
|
@@ -181,22 +167,66 @@ module Effective
|
|
181
167
|
content_type.include? 'audio'
|
182
168
|
end
|
183
169
|
|
184
|
-
def
|
185
|
-
|
170
|
+
def versions_info
|
171
|
+
self[:versions_info] || {}
|
186
172
|
end
|
187
173
|
|
188
|
-
def
|
189
|
-
|
174
|
+
def to_s
|
175
|
+
title
|
190
176
|
end
|
191
177
|
|
192
|
-
def
|
193
|
-
|
178
|
+
def reprocess!
|
179
|
+
begin
|
180
|
+
Rails.logger.info "Reprocessing ##{id}..."
|
181
|
+
print "Reprocessing ##{id}..."
|
182
|
+
|
183
|
+
raise 'must be processed first before reprocessed' unless processed?
|
184
|
+
|
185
|
+
data.cache_stored_file!
|
186
|
+
data.retrieve_from_cache!(data.cache_name)
|
187
|
+
data.recreate_versions!
|
188
|
+
save!
|
189
|
+
|
190
|
+
Rails.logger.info "Successfully reprocessed ##{id}"
|
191
|
+
print "success"; puts ''
|
192
|
+
true
|
193
|
+
rescue => e
|
194
|
+
Rails.logger.info "Error: #{id} -> #{e.to_s}"
|
195
|
+
print "error: #{e.to_s}"; puts ''
|
196
|
+
false
|
197
|
+
end
|
194
198
|
end
|
195
199
|
|
196
200
|
protected
|
197
|
-
|
198
|
-
|
199
|
-
if
|
201
|
+
|
202
|
+
def set_content_type
|
203
|
+
if [nil, 'null', 'unknown', 'application/octet-stream', ''].include?(content_type)
|
204
|
+
self.content_type = case File.extname(file_name).downcase.gsub(/\?.+/, '')
|
205
|
+
when '.mp3' ; 'audio/mp3'
|
206
|
+
when '.mp4' ; 'video/mp4'
|
207
|
+
when '.mov' ; 'video/mov'
|
208
|
+
when '.m2v' ; 'video/m2v'
|
209
|
+
when '.m4v' ; 'video/m4v'
|
210
|
+
when '.3gp' ; 'video/3gp'
|
211
|
+
when '.3g2' ; 'video/3g2'
|
212
|
+
when '.avi' ; 'video/avi'
|
213
|
+
when '.jpg' ; 'image/jpg'
|
214
|
+
when '.gif' ; 'image/gif'
|
215
|
+
when '.png' ; 'image/png'
|
216
|
+
when '.bmp' ; 'image/bmp'
|
217
|
+
when '.ico' ; 'image/x-icon'
|
218
|
+
when '.txt' ; 'text/plain'
|
219
|
+
when '.doc' ; 'application/msword'
|
220
|
+
when '.docx' ; 'application/msword'
|
221
|
+
when '.xls' ; 'application/excel'
|
222
|
+
when '.xlsx' ; 'application/excel'
|
223
|
+
else ; 'unknown'
|
224
|
+
end
|
225
|
+
end
|
226
|
+
end
|
227
|
+
|
228
|
+
def update_asset_dimensions
|
229
|
+
if data.present? && data_changed? && image?
|
200
230
|
begin
|
201
231
|
image = MiniMagick::Image.open(self.data.path)
|
202
232
|
self.width = image[:width]
|
@@ -206,6 +236,13 @@ module Effective
|
|
206
236
|
end
|
207
237
|
true
|
208
238
|
end
|
239
|
+
|
240
|
+
def enqueue_delayed_job
|
241
|
+
if !self.processed && self.upload_file.present? && self.upload_file != 'placeholder'
|
242
|
+
Effective::DelayedJob.new.process_asset(self.id)
|
243
|
+
end
|
244
|
+
end
|
245
|
+
|
209
246
|
end
|
210
247
|
|
211
248
|
class AssetStringIO < StringIO
|
@@ -12,14 +12,9 @@ module Effective
|
|
12
12
|
box :string, :default => 'assets', :validates => [:presence] # This is essentially a category
|
13
13
|
end
|
14
14
|
|
15
|
-
|
15
|
+
default_scope -> { includes(:asset).order("\"#{EffectiveAssets.attachments_table_name.to_s}\".\"position\" ASC, \"#{EffectiveAssets.attachments_table_name.to_s}\".\"asset_id\" ASC") }
|
16
16
|
|
17
|
-
|
17
|
+
validates_presence_of :asset_id
|
18
18
|
|
19
|
-
class << self
|
20
|
-
def default_scope
|
21
|
-
includes(:asset).order(:position)
|
22
|
-
end
|
23
|
-
end
|
24
19
|
end
|
25
20
|
end
|
@@ -4,96 +4,51 @@
|
|
4
4
|
|
5
5
|
module Effective
|
6
6
|
class DelayedJob
|
7
|
-
def process_asset(
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
puts "Processing an asset ID ##{asset.id}..."
|
13
|
-
|
14
|
-
if asset.upload_file.include?("#{Asset.s3_base_path}")
|
15
|
-
if asset.image?
|
16
|
-
puts "Asset is an image in our S3 assets directory. Downloading and processing..."
|
17
|
-
|
18
|
-
# Carrierwave must download the file, process it, then re-upload it to S3
|
19
|
-
asset.remote_data_url = asset.upload_file
|
20
|
-
asset.processed = true
|
21
|
-
asset.save!
|
22
|
-
else
|
23
|
-
puts "Asset is a non-image in our S3 uploads directory. Copying to final location..."
|
24
|
-
|
25
|
-
# We have uploaded a video, or something non-image to our S3 bucket.
|
26
|
-
# We do not currently process anything.
|
27
|
-
|
28
|
-
puts "Marking local asset as processed..."
|
29
|
-
asset.update_column(:data, asset.file_name)
|
30
|
-
asset.processed = true
|
31
|
-
asset.save!
|
32
|
-
end
|
33
|
-
elsif asset.upload_file.include?(Asset.string_base_path)
|
34
|
-
puts "Asset is a string-based asset. Processing..."
|
35
|
-
|
36
|
-
asset.data.cache_stored_file!
|
37
|
-
asset.data.retrieve_from_cache!(asset.data.cache_name)
|
38
|
-
asset.data.recreate_versions!
|
39
|
-
asset.processed = true
|
40
|
-
asset.save!
|
41
|
-
else
|
42
|
-
puts "Asset is not an s3 uploaded asset. Downloading and processing..."
|
43
|
-
|
44
|
-
# Carrierwave must download the file, process it, then re-upload it to S3
|
45
|
-
asset.remote_data_url = asset.upload_file
|
46
|
-
asset.processed = true
|
47
|
-
asset.save!
|
48
|
-
end
|
49
|
-
|
50
|
-
puts "Successfully processed the asset."
|
51
|
-
rescue => e
|
52
|
-
puts "An error occurred while processing an asset:"
|
53
|
-
puts e.message
|
54
|
-
puts e.backtrace.inspect
|
55
|
-
end
|
7
|
+
def process_asset(obj)
|
8
|
+
if obj.kind_of?(Effective::Asset)
|
9
|
+
asset = obj
|
10
|
+
else
|
11
|
+
asset = Effective::Asset.where(:id => (obj.to_i rescue 0)).first
|
56
12
|
end
|
57
|
-
end
|
58
|
-
handle_asynchronously :process_asset
|
59
13
|
|
60
|
-
|
61
|
-
|
14
|
+
if asset.present? && !asset.processed? && asset.upload_file.present? && asset.upload_file != 'placeholder'
|
15
|
+
puts "Processing asset ##{asset.id} from #{asset.upload_file}."
|
16
|
+
|
17
|
+
if asset.upload_file.include?(Effective::Asset.string_base_path)
|
18
|
+
puts "String-based Asset processing and uploading..."
|
62
19
|
|
63
|
-
Asset.all.each do |asset|
|
64
|
-
begin
|
65
|
-
puts "Processing Asset ID=#{asset.id}..."
|
66
20
|
asset.data.cache_stored_file!
|
67
21
|
asset.data.retrieve_from_cache!(asset.data.cache_name)
|
68
22
|
asset.data.recreate_versions!
|
69
|
-
|
70
|
-
puts "
|
71
|
-
|
72
|
-
|
23
|
+
elsif asset.upload_file.include?(Effective::Asset.s3_base_path)
|
24
|
+
puts "S3 Uploaded Asset downloading and processing..."
|
25
|
+
# Carrierwave must download the file, process it, then upload the generated versions to S3
|
26
|
+
# We only want to process if it's an image, so we don't download zips or videos
|
27
|
+
asset.remote_data_url = asset.url if asset.image?
|
28
|
+
else
|
29
|
+
puts "Non S3 Asset downloading and processing..."
|
30
|
+
puts "Downloading #{asset.url}"
|
31
|
+
|
32
|
+
# Carrierwave must download the file, process it, then upload it and generated verions to S3
|
33
|
+
# We only want to process if it's an image, so we don't download zips or videos
|
34
|
+
asset.remote_data_url = asset.upload_file
|
73
35
|
end
|
74
|
-
end
|
75
|
-
end
|
76
|
-
handle_asynchronously :reprocess_all_assets
|
77
36
|
|
78
|
-
|
79
|
-
|
37
|
+
asset.processed = true
|
38
|
+
asset.save!
|
80
39
|
|
81
|
-
|
82
|
-
config.fog_credentials = {
|
83
|
-
:provider => 'AWS',
|
84
|
-
:aws_access_key_id => EffectiveAssets.aws_access_key_id,
|
85
|
-
:aws_secret_access_key => EffectiveAssets.aws_secret_access_key
|
86
|
-
}
|
87
|
-
config.fog_directory = EffectiveAssets.aws_bucket
|
88
|
-
config.fog_public = EffectiveAssets.aws_acl.to_s.include?('public')
|
89
|
-
config.fog_attributes = {'Cache-Control'=>'max-age=315576000'}
|
90
|
-
config.cache_dir = "#{Rails.root}/tmp/uploads" # For heroku
|
91
|
-
end
|
40
|
+
(GC.start rescue nil)
|
92
41
|
|
93
|
-
|
42
|
+
puts "Successfully processed the asset."
|
43
|
+
end
|
44
|
+
end
|
45
|
+
handle_asynchronously :process_asset
|
94
46
|
|
95
|
-
|
47
|
+
def reprocess_asset(id)
|
48
|
+
Effective::Asset.find(id).reprocess!
|
49
|
+
(GC.start rescue nil)
|
96
50
|
end
|
51
|
+
handle_asynchronously :reprocess_asset
|
97
52
|
|
98
53
|
end
|
99
54
|
end
|