У меня есть приложение rails 3 с UploadsUploader и модель ресурсов, на которой она установлена. Недавно я переключился на использование хранилища s3, и это нарушило мою способность загружать файлы с помощью метода send_to. Я могу включить загрузку с использованием метода redirect_to, который просто перенаправляет пользователя на аутентифицированный URL-адрес s3. Мне нужно аутентифицировать загрузки файлов, и я хочу, чтобы URL-адрес был http://mydomainname.com/the_file_path или http://mydomainname.com/controller_action_name/id_of_resource, поэтому я предполагаю, что мне нужно использовать send_to, но есть ли способ сделать это с помощью метода redirect_to? Теперь мой текущий код. Resources_controller.rb
def download
resource = Resource.find(params[:id])
if resource.shared_items.find_by_shared_with_id(current_user) or resource.user_id == current_user.id
filename = resource.upload_identifier
send_file "#{Rails.root}/my_bucket_name_here/uploads/#{filename}"
else
flash[:notice] = "You don't have permission to access this file."
redirect_to resources_path
end
end
Инициализатор carrierwave.rb:
CarrierWave.configure do |config|
config.fog_credentials = {
:provider => 'AWS', # required
:aws_access_key_id => 'xxxx', # copied off the aws site
:aws_secret_access_key => 'xxxx', #
}
config.fog_directory = 'my_bucket_name_here' # required
config.fog_host = 'https://localhost:3000' # optional, defaults to nil
config.fog_public = false # optional, defaults to true
config.fog_attributes = {'Cache-Control'=>'max-age=315576000'} # optional, defaults to {}
end
upload_uploader.rb
class UploadUploader < CarrierWave::Uploader::Base
storage :fog
def store_dir
"uploads"
end
end
Все это вызывает ошибку:
Не удается прочитать файл /home/tom/Documents/ruby/rails/circlshare/My _bucket_name_here/uploads/Picture0024.jpg
Я пробовал читать информацию о несущей, тумане, send_to и обо всем этом, но все, что я пробовал, пока еще не принесло результатов. Загрузка работает нормально, и я могу видеть файлы в ведро s3. Использование re_direct было бы замечательно, так как файл не проходил бы через мой сервер. Любая помощь оценивается. Спасибо.