【发布时间】:2015-01-10 19:46:49
【问题描述】:
我想在用户通过手机下载信息的同时向他们发送电子邮件。我尝试发送的 pdf 使用 CarrierWave 存储在 AWS 上。我不完全确定如何从 CarrierWave 访问文件。
问题 #1) - 不太重要 - 一个问题是我应该要求服务器从 AWS 中提取这些文件以通过电子邮件发送,还是应该在将这些文件上传到 AWS 时将它们缓存在服务器上。目前在 AWS 上存储文件的目的是为了将它们拉到 iOS 客户端(手机)。
...让我们假设现在我正在尝试从 AWS 中提取文件 (pdf) 以通过电子邮件发送。下面代码中的命令 File.read(@file) 将不起作用,因为我试图拉下一个文件,例如 (example - @file = 'http://placecorgi.com/100/100.pdf') 这不是文件,而是服务器上的文件。
问题 #2) - 更重要 - 我需要更改哪些内容才能从 AWS 下载此文件并通过 UserMailer 发送?
这是 UserMailer - 我正在尝试修复方法 send_user_pages。方法welcome_email 工作正常。
class UserMailer < ActionMailer::Base
def welcome_email(user)
@user = user
attachments['mail.pdf'] = File.read('mail.pdf')
mail(to: user.email, subject: 'Welcome to App!')
end
def send_user_pages(user, pages_array)
@user = user
@pages_array = pages_array
pages_array.each_with_index do |page, index|
@file = "#{page.url}"
attachments["user_pages_#{index}.pdf"] = File.read(@file)
end
mail(to: user.email, subject: 'Your Pages')
end
end
这是我的 CarrierWave 设置...
CarrierWave.configure do |config|
if Rails.env.test?
config.storage = :file
else
config.storage = :fog
config.fog_credentials = {
provider: 'AWS',
aws_access_key_id: ENV['S3_ACCESS_KEY_ID'],
aws_secret_access_key: ENV['S3_SECRET_ACCESS_KEY'],
region: 'us-west-1'
}
if Rails.env.production?
config.fog_directory = ENV['AWS_BUCKET']
else
config.fog_directory = 'q-local'
end
end
end
这是我的 CarrierWave 上传器...
class AssetUploader < CarrierWave::Uploader::Base
def self.with_allowed_type(*types)
klass = Class.new(self)
klass.instance_eval do
define_method :extension_white_list do
types
end
end
klass
end
def store_dir
"uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}"
end
end
【问题讨论】:
标签: ruby-on-rails pdf amazon-web-services download carrierwave