【问题标题】:save_and_process post processing 403 Forbidden Carrierwave_direct S3 Fogsave_and_process 后处理 403 Forbidden Carrierwave_direct S3 雾
【发布时间】:2012-02-03 20:23:55
【问题描述】:

我正在尝试为我的应用开发直接文件上传到 S3。我正在关注 github 教程,一切都或多或少没问题,但在尝试进行后期处理时收到错误消息。

我做了以下事情:

我有一个名为 clip.rb 的 activerecord 模型:

class Clip < ActiveRecord::Base
  belongs_to :attachable, :polymorphic => true
  mount_uploader :avatar, AvatarUploader

  attr_accessible :id, :avatar, :name, :clipat_file_name, :attachable_id, :attachable_type, :clipat, :project_id, :user_id, :path, :parent_id, 

  def save_and_process_avatar(options = {})
    if options[:now] or 1==1
      self.remote_avatar_url = avatar.direct_fog_url(:with_path => true)
      save
    else
      Resque.enqueue(AvatarProcessor, attributes)
    end
  end

然后我有一个上传器:avatar_uploader.rb

class AvatarUploader < CarrierWave::Uploader::Base
   include CarrierWave::RMagick
   include CarrierWaveDirect::Uploader
  def store_dir
    "uploads/#{model.class.to_s.underscore}/#{mounted_as}"  #I removed /#{model.id} from the template because it creates an empty directory on the server. But If I put it back, the same problem remains
  end
  version :thumb do
     process :resize_to_limit => [50, 50]
   end
end

还有一个化身控制器:

class AvatarsController < ApplicationController
  def new
    @uploader = Clip.new.avatar
    @uploader.success_action_redirect = 'http://localhost:3000/clips'
  end
end

最后是我的 clip_controller:

class ClipsController < ApplicationController
  def index
    if params[:key]
      key=params[:key].split("/")
      clip = Clip.new
      clip.attachable_id = key[3]
      clip.attachable_type = "Pmdocument"
      clip.key = params[:key]
#      clip.save
      clip.save_and_process_avatar
    end
    @clips = Clip.where("avatar is not null")

    respond_to do |format|
      format.html # index.html.erb
      format.json { render json: @clips.collect { |p| p.to_jq_upload }.to_json }
    end
  end

当我上传文件时,如果我只是保存我的“剪辑”,一切都很好。但是,如果我使用 save_and_process 方法,则会出现以下错误: self.remote_avatar_url = avatar.direct_fog_url(:with_path => true)

这是错误信息:

OpenURI::HTTPError (403 Forbidden):
  app/models/clip.rb:38:in `save_and_process_avatar'
  app/controllers/clips_controller.rb:22:in `index'

Rendered /Users/nico/.rvm/gems/ruby-1.9.2-p290/gems/actionpack-3.1.3/lib/action_dispatch/middleware/templates/rescues/_trace.erb (1.4ms)
Rendered /Users/nico/.rvm/gems/ruby-1.9.2-p290/gems/actionpack-3.1.3/lib/action_dispatch/middleware/templates/rescues/_request_and_response.erb (1.2ms)
Rendered /Users/nico/.rvm/gems/ruby-1.9.2-p290/gems/actionpack-3.1.3/lib/action_dispatch/middleware/templates/rescues/diagnostics.erb within rescues/layout (5.2ms)

我已经坚持了两天了,任何帮助将不胜感激!!!谢谢!!!尼古拉斯。

【问题讨论】:

  • 这条线的结果是什么? self.remote_avatar_url = avatar.direct_fog_url(:with_path =&gt; true)
  • 我已经停止使用 Carrierwave 很长时间了(回到 Paperclip)。所以我无法回答你的问题。对不起...

标签: ruby-on-rails carrierwave fog


【解决方案1】:

我敢打赌,提供给 self.remote_avatar_url 的 URL 不正确。我遇到了同样的问题,CWDirect gem 提供的代码对我不起作用,并且给了我一个不正确的 URL,因此 CarrierWave 无法下载和处理图像。整个 403 Forbidden 错误消息是来自亚马逊的垃圾消息——这导致人们相信权限有问题;就我而言,权限绝对没有问题。只是那里没有图像。这是让我工作的代码,请注意我已经更改了 URL 的形成方式:

def save_and_process_image(options = {})
if options[:now]
  # debugger
  self.remote_image_url = image.direct_fog_url+self.key # OLD CODE THAT AINT WORKIN! --> image.direct_fog_url(:with_path => true)
  save
else
  # Resque.enqueue(AvatarProcessor, attributes)
  # TODO: Implement background processing
end
end

请注意,我挂载的字段的名称是 image 而不是 avatar

我是如何做到这一点并修复它的——试试这个,使用 rails 调试器(只需取消注释上面的调试器行)在 self.remote_image_url 行之前冻结程序,然后在调试模式下键入 @987654326 @ 启动控制台。然后你可以打印出来,看看 'image.direct_fog_url(:with_path => true)' 给了你什么价值。您可以将其复制并粘贴到浏览器中。如果它是错误的(可能是),那么您将收到愚蠢的权限错误(即使它不是权限问题),但是当它正确时,您将看到上传的图像或下载图像。

最好打开您的 Amazon S3 控制台并查看您的开发存储桶,这样您就可以找到刚刚上传的图像。在控制台中找到图像并转到其属性,您可以看到您应该使用的网址/url。

希望这会有所帮助。由于误导性错误,这对我来说很难追踪,我花了很多时间尝试更正我的 S3 存储桶上的权限,但这不是问题,只是 CWDirect github 页面中的代码对我不起作用(宝石版??)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-03-12
    • 2016-04-05
    • 1970-01-01
    • 2013-06-23
    • 1970-01-01
    • 2012-12-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多