2012-03-05 124 views
1

我正在使用rails 3.2.1,carrierwave 0.5.8,fog 1.1.2,rmagick 2.13.1。carrierwave heroku - 不斷收到錯誤信息

我想將產品的圖片上傳到amazon s3上,但是我不斷收到這個錯誤信息,無論我在網上找到的carrierwave.rb初始化文件是什麼樣的(我想我已經試過了),似乎沒有工作。沒有任何內容也上傳到我的S3存儲桶。對於我嘗試過的其他版本,我得到了同樣的錯誤消息。我認爲這可能是我的控制器中的某些東西,但不確定會發生什麼。請幫忙!從Heroku的

錯誤味精登錄:

2012-03-05T06:35:18+00:00 app[web.1]: app/controllers/products_controller.rb:40:in `update' 
2012-03-05T06:35:18+00:00 app[web.1]: ArgumentError (Missing required arguments: aws_access_key_id, aws_secret_access_key): 
2012-03-05T06:35:18+00:00 app[web.1]: cache: [POST /products/3] invalidate, pass 

carrierwave初始化

CarrierWave.configure do |config| 
if Rails.env.production? 
    config.storage = :fog 
    config.fog_credentials = { 
    :provider    => 'AWS', 
    :aws_access_key_id  => 'access_key', 
    :aws_secret_access_key => 'secret_access_key', 
    :region    => 'us-east-1' 
    } 


config.fog_directory = 'bucket_name' 
config.fog_public  = true         
config.fog_attributes = {'Cache-Control' => 'max-age=315576000'} 

else 
    #for development and testing locally 
    config.storage = :file 
    config.enable_processing = false 
end 
end 

image_uploader

include CarrierWave::RMagick 
    def store_dir 
    "uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}" 
    end 

    version :thumb_pic do 
    process :resize_to_limit => [170, 170] 
    end 
end 

控制器

def create 
    @all_categories = get_all_categories 
    checked_categories = get_categories_from(params[:categories]) 
    removed_categories = @all_categories - checked_categories 
    @product = Product.new(params[:product]) 
    if @product.save 
    checked_categories.each {|cat| @product.categories << cat if [email protected]?(cat)} 
    removed_categories.each {|cat| @product.categories.delete(cat) if @product.categories.include?(cat)} 
    redirect_to(:action => 'list') 
    else 
    render "new" 
    end 
end 

這是我所看到的,當我檢查Heroku的配置

DATABASE_URL  => ..... 
GEM_PATH   => vendor/bundle/ruby/1.9.1 
LANG    => en_US.UTF-8 
PATH    => bin:vendor/bundle/ruby/1.9.1/bin:/usr/local/bin:/usr/bin:/bin 
RACK_ENV   => production 
RAILS_ENV   => production 
S3_BUCKET   => bucket_name 
S3_KEY    => access_key 
S3_SECRET   => secret_access_key 
SHARED_DATABASE_URL => ..... 

我花了好兩天這已經並沒有什麼。

回答

1

有幾個問題錯了我碼。我需要將config.fog_public更改爲false(每個亞馬遜),並且從我的末端出現了一個霧氣問題。顯然它並沒有傳遞這些信息。我必須通過這兩條線來手動添加信息:

compute = Fog::Compute.new(:provider => 'AWS', :aws_access_key_id => ACCESS_KEY_ID, :aws_secret_access_key => SECRET_ACCESS_KEY)

storage = Fog::Storage.new(:provider => 'AWS', :aws_access_key_id => ACCESS_KEY_ID, :aws_secret_access_key => SECRET_ACCESS_KEY)

在那之後,一切正常。此外,請確保將其放在字符串格式中,因爲除非明確指出,否則Rails不會將任何以大寫字母開頭的內容識別爲字符串。

+2

我與carrierwave,aws和heroku部署有類似的問題。 Works可以在本地查找,但無法上傳部署。你能編輯和添加上面的確切你的'config/initializers/carrierwave.rb'文件看起來像什麼?這可能會讓我的應用程序正常運行。 – BenU 2012-07-16 01:40:11

1

取出if Rails.env.production?

如果你這樣做是正確的,你應該使用environment variables to store your credentials,你也應該matching your dev, test and productions environments在功能方面(桶名字也應該可能是一個配置VAR)

+0

我已經嘗試過,它仍然無法正常工作。我犯了同樣的錯誤。我甚至在我的config.ru文件中添加了'使用Rack :: Static,:urls => ['/ uploads'],:root =>'tmp'',並在我的上傳文件中定義了cache_dir,並且沒有任何效果。我仍然每次都得到相同的錯誤 – noob 2012-03-05 17:38:22