我剛剛從通過Carrierwave本地上傳的圖片切換到使用Amazon s3通過我的Rails 3.1應用程序中的霧寶石進行切換。在添加圖像時,當我在應用程序中單擊圖像時,該URL會提供我的訪問密鑰和簽名。下面是一個簡單的網址(XXX替換成信息字符串):在Carrierwave和Fog的URL中顯示亞馬遜訪問密鑰
https://s3.amazonaws.com/bucketname/uploads/photo/image/2/IMG_4842.jpg?AWSAccessKeyId=XXX&Signature=XXX%3D&Expires=1332093418
這是在發展發生(本地主機:3000),當我使用Heroku上進行生產。這是我上傳:
class ImageUploader < CarrierWave::Uploader::Base
include CarrierWave::RMagick
storage :fog
def store_dir
"uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}"
end
process :convert => :jpg
process :resize_to_limit => [640, 640]
version :thumb do
process :convert => :jpg
process :resize_to_fill => [280, 205]
end
version :avatar do
process :convert => :jpg
process :resize_to_fill => [120, 120]
end
end
而且我的配置/初始化/ fog.rb:
CarrierWave.configure do |config|
config.fog_credentials = {
:provider => 'AWS',
:aws_access_key_id => 'XXX',
:aws_secret_access_key => 'XXX',
}
config.fog_directory = 'bucketname'
config.fog_public = false
end
任何人都知道如何確保這些信息是不可用?
UPDATE:添加視圖和控制器的代碼:從局部在用戶 /show.html.erb:
<% if @user.photos.any? %>
<% for photo in @user.photos %>
<li class="span4 hidey">
<div class="thumb_box">
<%=link_to(image_tag(photo.image_url(:thumb).to_s), photo.image_url.to_s,
:class=>"lb_test") %>
...
</div>
</li>
<% end %>
<% end %>
users_controller.rb:
def show
@user = User.find(params[:id])
end
UPDATE:添加一個錯誤頁面我從網址中刪除訪問密鑰信息時獲取:
This XML file does not appear to have any style information associated with it. The document tree is shown below.
<Error>
<Code>AccessDenied</Code>
<Message>Access Denied</Message>
<RequestId>47077D6EC13AD1D8</RequestId>
<HostId>+HTeODcWTqv3gbRIAwf+lI6sPzfNTegDXjT9SnMdqrYr7gLD1TD0qN+OgMLwA1JO
</HostId>
</Error>
凱文,我猜問題是在您的視圖或控制器。除非你需要另一個轉換版本。你能發佈代碼嗎? – 2012-03-29 11:17:52
嗨,Ed,我添加了來自其中一個視圖和控制器操作的代碼。謝謝。 – kcurtin 2012-03-29 14:57:17
如果您在控制檯中評估photo.image.url.to_s會發生什麼情況?它是否指向一個真實的圖像? – 2012-03-29 16:21:20