【发布时间】:2014-01-18 10:11:25
【问题描述】:
我正在使用 Rails 4、Ruby 2.0、Paperclip 3.5.2。 我的 production.rb 有以下内容
config.paperclip_defaults = {
:storage => :s3,
:s3_credentials => {
:bucket => ENV['S3_BUCKET_NAME'],
:access_key_id => ENV['AWS_ACCESS_KEY_ID'],
:secret_access_key => ENV['AWS_SECRET_ACCESS_KEY']
}
}
我可以保存文件,也可以使用
检索 view.html.erb 中的文件 `<%= image_tag card.ai.url(:thumb) %>`
我的问题是,如何访问控制器中的文件?我想将它添加到一个 zip 文件中,z:
def create_zip
....
elsif ENV['RAILS_ENV'] == "production"
z.add_file(card.ai.path)
...
end
这给出了错误:“无法打开文件:没有这样的文件或目录”。还尝试了“card.ai.url.path”——当然没有用。 我读过 [Paperclip + S3 大规模压缩,但不,我不想禁用任何东西。所以基本上有很多帖子说如何在 .html.erb 文件中显示图像文件,但我想在控制器中访问它。
-快结束了
已经走到这一步...它不会使网站崩溃,并且 temp_file 确实进入了 zip 文件,但 temp_file 是空的。
s3One = AWS::S3.new(:access_key_id => ENV['AWS_ACCESS_KEY_ID'],
:secret_access_key => ENV['AWS_SECRET_ACCESS_KEY'])
cardsets_bucket = s3One.buckets[ENV['S3_BUCKET_NAME']]
ai_file_object = cardsets_bucket.objects[card.ai]
temp_dir_name = "#{Rails.root}/public/temp/pictures}"
temp_dir = File.dirname("#{temp_dir_name}")
unless File.directory?("#{temp_dir_name}")
FileUtils.mkdir_p("#{temp_dir_name}")
end
if File.exists?("#{temp_dir_name}/tempPicture.jpg")
File.delete("#{temp_dir_name}/tempPicture.jpg")
end
temp_file = File.new("#{temp_dir_name}/tempPicture.jpg", 'w')
File.open("#{temp_dir_name}/tempPicture.jpg", 'w') do |file|
ai_file_object.read do |chunk|
file.write(chunk)
end
end
z.add_file("#{temp_dir_name}/tempPicture.jpg")
也试过 ai_file_object = cardets_bucket.objects[card.ai.url] -- 仍然 tempPicture 是空的。还尝试了 card.ai.path 并导致错误 AWS 找不到密钥。
提前致谢。
【问题讨论】:
标签: ruby-on-rails amazon-s3 paperclip