0

I followed the railscasts about using carrierwave with fog with aws s3 to the T but it doesnt seem to work.

The Gemfile is as follows:

source 'https://rubygems.org'
ruby '1.9.3'
gem 'rails', '3.2.13'


# Bundle edge Rails instead:
# gem 'rails', :git => 'git://github.com/rails/rails.git'

gem 'pg'
gem 'pg_search'

gem 'devise'

gem "therubyracer"
gem "less-rails"  #Sprockets (what Rails 3.1 uses for its asset pipeline) supports LESS 
gem "twitter-bootstrap-rails", :git => 'git://github.com/seyhunak/twitter-bootstrap-rails.git'
gem "simple_form"
gem 'aws-sdk', '~> 1.8.1.2'
gem 'activerecord-reputation-system', require: 'reputation_system'
gem 'bootstrap-will_paginate'

gem 'carrierwave'
gem "rmagick"
gem "fog", "~> 1.3.1"
gem 'carrierwave-aws'

config/initializers/carrierwave.rb

require 'carrierwave'

CarrierWave.configure do |config|
  config.fog_credentials = {
    provider: "AWS",
    aws_access_key_id: ENV["xxx"],
    aws_secret_access_key: ENV["yyy"], 
    region: ENV['ap-southeast-1']
  }

  config.cache_dir = "#{Rails.root}/tmp/uploads"
  config.fog_directory = ENV["ABC"]
end

The uploader:

class ImageUploader < CarrierWave::Uploader::Base
require 'carrierwave/processing/mime_types'

  before :store, :remember_cache_id
  after :store, :delete_tmp_dir

  # Include RMagick or MiniMagick support:
  include CarrierWave::RMagick
  # include CarrierWave::MiniMagick

  # Include the Sprockets helpers for Rails 3.1+ asset pipeline compatibility:
  include Sprockets::Helpers::RailsHelper
  include Sprockets::Helpers::IsolatedHelper

  # Choose what kind of storage to use for this uploader:
  # storage :file
  storage :fog

  include CarrierWave::MimeTypes

  process :set_content_type
  # Override the directory where uploaded files will be stored.
  # This is a sensible default for uploaders that are meant to be mounted:
  def store_dir
    "uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}"
  end

  version :thumb do
    process :resize_to_limit => [200, 200]
  end

   # store! nil's the cache_id after it finishes so we need to remember it for deletion
  def remember_cache_id(new_file)
    @cache_id_was = cache_id
  end

  def delete_tmp_dir(new_file)
    # make sure we don't delete other things accidentally by checking the name pattern
    if @cache_id_was.present? && @cache_id_was =~ /\A[\d]{8}\-[\d]{4}\-[\d]+\-[\d]{4}\z/
      FileUtils.rm_rf(File.join(root, cache_dir, @cache_id_was))
    end
  end
end

the controller:

class NotesController < ApplicationController
    before_filter :authenticate_user!, only: [:create, :destroy]
    before_filter :correct_user,   only: :destroy

    def index
    end

    def create
        @note = current_user.notes.build(params[:note])
        @notes = Note.paginate(page: params[:page])
    if @note.save
      flash[:success] = "Note uploaded!"
      redirect_to root_url
    else
        flash.now[:error] = "Note failed to upload."
      render 'static_pages/home'
    end
    end

    def destroy
        @note.destroy
        flash[:success] = "Note deleted."
        redirect_to root_url
    end

private

    def correct_user
      @note = current_user.notes.find_by_id(params[:id])
      redirect_to root_url if @note.nil?
    end
end

I don't really know if the problem lies in the gem or the controller. Even the controller is based on the microposts controller in Michael Hartl's book "The Ruby on Rails Tutorial" so I don't know where I have gone wrong.

Aaron Mak
  • 1
  • 1

1 Answers1

0

That's an awfully early version of fog. The latest is 1.12.1. Try updating to the latest release using the following entry in your Gemfile

gem "fog", "~> 1.12.1"
Kyle Rames
  • 398
  • 2
  • 5
  • sorry, it still isn't working. I initially followed the documentation given in the CarrierWave gem which is why fog is of an older version. – Aaron Mak Jul 02 '13 at 08:36