carrierwave heroku - постоянно получаю сообщение об ошибке - PullRequest
1 голос
/ 05 марта 2012

Я использую рельсы 3.2.1, несущая волна 0.5.8, туман 1.1.2, rmagick 2.13.1.

Я пытаюсь загрузить изображения продуктов на 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.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 !@product.categories.include?(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 => .....

Я уже потратил на это два добрых дня и ничего.

Ответы [ 2 ]

1 голос
/ 09 марта 2012

Было несколько проблем с моим кодом. Мне нужно было изменить config.fog_public на false (для Amazon), и с моего конца была проблема с жемчужиной тумана. Видимо это не передавало информацию. Мне пришлось вручную добавить информацию через эти две строки:

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 не распознает ничего, начиная с заглавных букв как строку, если это не указано явно.

1 голос
/ 05 марта 2012

Извлеките if Rails.env.production?.

Если вы все делаете правильно, вы должны использовать переменные окружения для хранения ваших учетных данных , и вы также должны быть соответствующимиваша среда разработки, тестирования и производства с точки зрения функциональности (имя Bucket также, вероятно, должно быть config var)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...