【问题标题】:Uploading to S3 on Heroku with Paperclip (delayed_job question)使用 Paperclip 上传到 Heroku 上的 S3(delayed_job 问题)
【发布时间】:2011-05-02 12:45:59
【问题描述】:

我正在尝试上传到我构建的投资组合应用程序,特别是试图找到将延迟作业挂钩到流程中的位置。否则一切正常。现在它在app/controllers/portfolio_items_controller.rb:18:in 'create' 上返回undefined method 'call' for #<Class:0xae68750> 所以这是我的模型和控制器的那部分......有人看到任何可能出错的地方吗?我现在使用的钩子来自这个博客: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 问题,我在任何地方都找不到这种方法。还有更合适的吗?

【问题讨论】:

    标签: ruby-on-rails amazon-s3 paperclip delayed-job


    【解决方案1】:

    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
    

    【讨论】:

      【解决方案2】:

      我认为是这样的:

       @portfolio_item = PortfolioItem.(params[:portfolio_item])
      

      应该是这样的:

       @portfolio_item = PortfolioItem.new(params[:portfolio_item])
      

      【讨论】:

      • 天哪。对,就是那样。它仍然不起作用。我已经编辑了问题。
      猜你喜欢
      • 2015-10-29
      • 2012-09-23
      • 2012-02-22
      • 2019-07-14
      • 2015-12-15
      • 2017-01-15
      • 1970-01-01
      • 2023-03-29
      • 2014-10-23
      相关资源
      最近更新 更多