Sunday, October 9, 2016

Uninitialized constant error with Rails 5, Paperclip and Amazon S3

I haven't used Heroku to host anything in quite a while, but had a personal project that I wanted to put up and show someone. Unfortunately, every time you push an update to Heroku or the app reboots, it clears any files you've uploaded to it. I went ahead with setting up Amazon S3 for file storage and thought everything would be gravy to my dismay. Heroku gave me a 500 error when I tried uploading an image: NameError (uninitialized constant Paperclip::Storage::S3::AWS)
I wondered if it was an issue specific to Heroku, so I setup the Paperclip AWS config to test locally to no avail; I was still getting the same error. I immediately went to Google and tried all of the solutions I came across on Github and Stack Overflow to no avail; my problem persisted. I finally came across a post on Stack Overflow that had a similar error, and in the comments, someone suggested using the 5.0.0.beta2 version of the Paperclip gem. I updated my Gemfile to use that version: gem 'paperclip', '5.0.0.beta2' and after a bundle install - file uploads were working! I did have to specify the s3_host_name in my paperclip config to get images to display, but it worked. Since I haven't come across much information on this on the web, I thought I'd make a post about it. So if anyone else is having this issue, update your Gemfile to use a version of the Paperclip gem > 5.0. I updated mine to use Paperclip 5.1.0 and everything is working great.
gem 'paperclip', '5.1.0'
With the paperclip config as follows:
config.paperclip_defaults = {
    storage: :s3,
    s3_credentials: {
      bucket: ENV.fetch('S3_BUCKET_NAME'),
      access_key_id: ENV.fetch('AWS_ACCESS_KEY_ID'),
      secret_access_key: ENV.fetch('AWS_SECRET_ACCESS_KEY'),
      s3_region: ENV.fetch('AWS_REGION'),
      s3_host_name: ENV.fetch('S3_HOST_NAME'),
    }
  }

Cheers.

Wednesday, October 5, 2016

Rails 5 resque error 'cannot load such file -- rack/showexceptions'

I decided to setup some background jobs for an app I've been working on, and decided to go with Resque for handling the jobs. I wanted to be able to run the resque jobs as rake tasks, so I added the appropriate lines to my Rakefile, but when starting my Rails server - I got an error:
! Unable to load application: LoadError: cannot load such file -- rack/showexceptions
After a little Googling, I came across this issue posted on the Sidekiq Github account. The recommendation was to add the Sinatra gem, which worked for Sidekiq users. I gave it a try, and that fixed the error for me as well:
gem 'sinatra', github: 'sinatra'
Just thought I'd throw this up in case anyone else came across this issue.

Cheers