[英]Uploading to S3 on Heroku with Paperclip (delayed_job question)
我正在尝试上传到我构建的投资组合应用程序,特别是试图找到将delay_job挂接到流程中的位置。 否则一切正常。 现在,它在app/controllers/portfolio_items_controller.rb:18:in 'create'
上undefined method 'call' for #<Class:0xae68750>
返回undefined method 'call' for #<Class:0xae68750>
app/controllers/portfolio_items_controller.rb:18:in 'create'
所以这是我的模型以及控制器的那部分...任何人看到的东西可能都是出问题了吗? 我现在从这个博客获得的挂钩: http : //madeofcode.com/posts/42-paperclip-s3-delayed-job-in-rails
/app/controllers/portfolio_items_controller.rb
def create
@portfolio_item = PortfolioItem.new(params[:portfolio_item])
if @portfolio_item.save
flash[:notice] = "Portfolio item created. As soon as files are uploaded Portfolio item will be made live."
redirect_to @portfolio_item
else
render :action => 'new'
end
end
/app/models/asset.rb
class Asset < ActiveRecord::Base
attr_accessible :image, :image_file_name, :image_content_type, :image_file_size, :portfolio_item_id, :order
belongs_to :portfolio_item
has_attached_file :image,
:styles => {
:thumb => "20x20#",
:small => "100x100",
:large => "600x600>"
},
:storage => :s3,
:s3_credentials => {
:access_key_id => ENV["S3_KEY"],
:secret_access_key => ENV["S3_SECRET"]
},
:bucket => ENV["S3_BUCKET"],
:path => "portfolio/:attachment/:id/:style/:basename.:extension"
before_source_post_process do |image|
if source_changed?
processing = true
false
end
end
after_save do |image|
if image.source_changed?
Delayed::Job.enqueue ImageJob.new(image.id)
end
end
def regenerate_styles!
self.source.reprocess!
self.processing = false
self.save(false)
end
def source_changed?
self.source_file_size_changed? ||
self.source_file_name_changed? ||
self.source_content_type_changed? ||
self.source_update_at_changed?
end
end
class ImageJob < Struct.new(:image_id)
def perform
Image.find(self.image_id).regenerate_styles!
end
end
编辑:感谢善良的人们,这不再是缺少的.new了。 但是,现在没有定义before_source_post_process了吗? 而且,除了那个博客文章和这个SO问题之外,我找不到其他方法。 还有更合适的东西吗?
before_source_post_process对您不起作用。 它仅适用于:
has_attached_file :source
在你的情况下应该是
before_image_post_process
同样,source_changed吗? 方法应为:
def source_changed?
self.image_file_size_changed? ||
self.image_file_name_changed? ||
self.image_content_type_changed? ||
self.image_update_at_changed?
end
我认为这:
@portfolio_item = PortfolioItem.(params[:portfolio_item])
最有可能是这样的:
@portfolio_item = PortfolioItem.new(params[:portfolio_item])
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.