Я использую 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">×</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.)
Есть идеи?
Спасибо заранее!