2015-05-29 2 views
0

Я использую Carrierwave/Fog/S3 с Figaro для загрузки изображений для сайта в стиле виртуца.S3, Fog, Figaro, Carrierwave: Excon :: Errors :: Forbidden (Ожидаемый (200) <=> Фактический (403 Запретный)

Весь сайт работает красиво на местном уровне, никаких проблем. И на героику он отлично работает, пока я не создаю новый ресторан с изображением или не попытаюсь обновить изображение в существующем ресторане, а затем я получу его в мои журналы:

Excon::Errors::Forbidden (Expected(200) <=> Actual(403 Forbidden) 

Вот мой image_uploader.rb:

# encoding: utf-8 

class ImageUploader < CarrierWave::Uploader::Base 

    # Include RMagick or MiniMagick support: 
    # include CarrierWave::RMagick 
    include CarrierWave::MiniMagick 

    # Choose what kind of storage to use for this uploader: 
    if Rails.env.production? 
    storage :fog 
    else 
    storage :file 
    end 

    # Override the directory where uploaded files will be stored. 
    # This is a sensible default for uploaders that are meant to be mounted: 
    def store_dir 
    "uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}" 
    end 

    # Provide a default URL as a default if there hasn't been a file uploaded: 
    # def default_url 
    # # For Rails 3.1+ asset pipeline compatibility: 
    # # ActionController::Base.helpers.asset_path("fallback/" + [version_name, "default.png"].compact.join('_')) 
    # 
    # "/images/fallback/" + [version_name, "default.png"].compact.join('_') 
    # end 

    # Process files as they are uploaded: 
    process :resize_to_fit => [200, 300] 
    # 
    # def scale(width, height) 
    # # do something 
    # end 

    # Create different versions of your uploaded files: 
    # version :thumb do 
    # process :resize_to_fit => [50, 50] 
    # end 

    # Add a white list of extensions which are allowed to be uploaded. 
    # For images you might use something like this: 
    # def extension_white_list 
    # %w(jpg jpeg gif png) 
    # end 

    # Override the filename of the uploaded files: 
    # Avoid using model.id or version_name here, see uploader/store.rb for details. 
    # def filename 
    # "something.jpg" if original_filename 
    # end 

    end 

Вот мой _form.html.erb, который оказывается в обновлении и новые файлы:

<%= form_for(@restaurant, :html => {multipart: true}) do |f| %> 
    <% if @restaurant.errors.any? %> 
    <div id="error_explanation" class= "alert alert-danger alert-dismissable"> 
    <button type="button" class="close" data-dismiss="alert"><span aria-hidden="true">&times;</span><span class="sr-only">Close</span></button> 
     <h4><%= pluralize(@restaurant.errors.count, "error") %> prohibited this restaurant from being saved:</h4> 

     <ul> 
     <% @restaurant.errors.full_messages.each do |message| %> 
     <li><%= message %></li> 
     <% end %> 
     </ul> 
    </div> 
    <% end %> 

<div class="form-group"> 
    <%= f.label :name %><br> 
    <%= f.text_field :name, class: "form-control", placeholder: "Panera Bread" %> 
    </div> 
    <div class="form-group"> 
    <%= f.label :address %><br> 
    <%= f.text_field :address, class: "form-control", placeholder: "201 Brookline Avenue, Boston, MA 02215" %> 
    </div> 
    <div class="form-group"> 
    <%= f.label :phone %><br> 
    <%= f.text_field :phone, class: "form-control", placeholder: "(617) 247-0174" %> 
    </div> 
    <div class="form-group"> 
    <%= f.label :website %><br> 
    <%= f.text_field :website, class: "form-control", placeholder: "http://www.panerabread.com/" %> 
    </div> 
    <div class="form-group"> 
    <%= f.label :image %><br> 
    <%= f.file_field :image, class: "form-control" %> 
    </div> 
    <div class="actions"> 
    <%= f.submit class: "btn btn-primary" %> 
    </div> 
<% end %> 

Я проверил ключи, чтобы убедиться, что они правы. Я добавил политики доступа администратора к моим ключам (за this question и this one). Я проверил разрешения и все хорошо.

И до сих пор, спать на ней не работал (на this question.)

Есть идеи?

Спасибо заранее!

ответ

1

Я мог бы уйти, но убедитесь, что вы запускаете «heroku run rake db: migrate», чтобы сделать миграцию базы данных в процессе производства, и после этого обязательно запустите «перезапуск героя». Я не уверен, что это будет ответом на ваши проблемы, но «перезагрузка герою» помогла мне после долгого сражения с этим для veeerrrrry.

0

Я вижу два возможных причин, почему вы получите 403 от AWS:

  1. AWS не имеющих права доступа правильно (но вы уже проверили, что и вы были в состоянии загрузить изображения с вашего компьютера, так что меньше вероятно)
  2. данные, которые вы передаете AWS из экземпляра heroku, неверны.

Не могли бы вы приложить файл, в котором вы задали имя и ключи ведро S3? Вы пытались запустить консоль Rails и распечатать значения конфигурации? (вы можете запустить heroku run bash и после того, как вы подключитесь к heroku dyno bundle exec rails console и, вуаля, у вас есть доступ к вашему производственному серверу).

Вы также писали, что иногда загрузка изображений работает, но не при создании нового ресторана или обновлении существующего. Каковы эти случаи? Может быть интересно посмотреть, что делает их такими разными (и работает над героку)?

Смежные вопросы