错误:未定义的方法`presigned_post'

时间:2015-10-29 00:07:06

标签: ruby-on-rails ruby-on-rails-4 amazon-s3 carrierwave

我正在编写一个用户可以上传图像的rails应用程序。我正在使用Heroku部署,并使用Carrierwave和S3上传和存储图像。我已逐步遵循此heroku guide ...不幸的是,我仍然收到错误"未定义的方法`presigned_post'",并且不知道如何解决它。似乎S3_BUCKET没有被识别为aws对象......

有没有人遇到过这个问题并想出来了?这里有一些代码供参考:

图片控制器:



class PicturesController < ApplicationController
  before_action :set_s3_direct_post, only: [:new, :create]

  def index
    @pictures = Picture.all
  end

  def new
    @pictures = Picture.all
    @picture = Picture.new
  end

  def create
    @picture = Picture.new(picture_params)

    if @picture.save
      redirect_to new_picture_path, notice: "You just uploaded a picture!"
    else
      render "new"
    end
  end
                                                
  ...

  def picture_params
    params.require(:picture).permit(:attachment)
  end

private

  def set_s3_direct_post
    @s3_direct_post = S3_BUCKET.presigned_post(key: "uploads/#{SecureRandom.uuid}/${filename}", success_action_status: '201', acl: 'public-read')
  end
end
&#13;
&#13;
&#13;

新图片视图:

&#13;
&#13;
<h1>Upload a new picture</h1>
<br>
<div class="well">
  <%= form_for @picture, html: { class: 'directUpload', data: { 'form-data' => (@s3_direct_post.fields), 'url' => @s3_direct_post.url, 'host' => URI.parse(@s3_direct_post.url).host } } do |f| %>
    <%= f.file_field :attachment %>
    <%= f.submit "Upload", class: "btn btn-default" %>
  <% end %>
</div>
&#13;
&#13;
&#13;

和config / environment.rb:

&#13;
&#13;
require File.expand_path('../application', __FILE__)

# Initialize the Rails application.
Rails.application.initialize!
# S3
S3_BUCKET='fotoes'
AWS_ACCESS_KEY_ID='secretxxxxxxxx'
AWS_SECRET_ACCESS_KEY='xxxxxxxsecretxxxxxx'
&#13;
&#13;
&#13;

有什么想法吗?

3 个答案:

答案 0 :(得分:0)

@Jillian我想你的期望是S3_BUCKET类应该调用presigned_post方法,该方法应该被定义。然而,它似乎不是。我看了一下包含你所遵循的教程的heroku页面,并且你遵循了每条指令。我建议你联系heroku了解文档。但是,我会继续研究它

答案 1 :(得分:0)

谢谢大家的帮助。最后,我发现了一个更简单有效的不同演练。 (Heroku一个有点复杂,并且留下了很多错误 - 去图。)

This解决了所有问题:)

编辑:

  1. 不是一切 - 在我运行网站之前必须完成最后一步。在终端中运行此行:$ heroku config:添加AWS_ACCESS_KEY = value 和$ heroku config:添加AWS_SECRET_KEY = value,其中值分别是每个的S3凭据。

  2. 这是雾,载波,轨道,雾霾宝石的唯一组合(经过几周的骚动):

  3. gem'trail','4.1.0'

    gem'carrierwave','〜&gt; 0.10.0'

    宝石'迷雾','1.34.0'

    gem'flow-aws','0.7.6'

答案 2 :(得分:0)

我通过更新我的aws-sdk版本来解决这个问题

User C