我正在努力使用Carrierwave访问S3上的文件。
在我的上传程序文件doc_uploader.rb中,我有以下代码
storage :file
def store_dir
"uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}"
end
到uplooad“doc”模型定义如下
class Doc < ActiveRecord::Base
belongs_to :user
mount_uploader :doc, DocUploader
end
要访问上传的文件,我在控制器中有以下代码行
@doc = current_user.docs.order("created_at").last #last file uploaded by user
io = open("#{Rails.root}/public" + @doc.doc.url)
一切都在当地完美运作。现在我想在上传器中将文件移动到S3,我使用雾并替换
storage :file
通过
storage :fog
我调整配置文件carrierwave.rb,上传效果很好。但是,要访问该文件,我尝试使用
@doc = current_user.docs.order("created_at").last
io = open("#{@doc.doc.url}")
我收到以下错误
No such file or directory @ rb_sysopen - /uploads/doc/doc/11/the_uploaded_file.pdf
有人能给我正确的语法来访问S3上的文件吗?感谢。
答案 0 :(得分:0)
通过控制台访问资产时,它只为您提供路径,您可能需要附加协议&amp;托管@doc.doc.url
,例如:
io = open("http://example.com#{@doc.doc.url}")
或者您可以在您需要的环境中设置资产网址,但这不是必需的:
config.asset_host = 'http://example.com'
这仅适用于您使用控制台的情况,在任何不适用的网络视图中,carrierwave似乎都会处理它