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'),


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.


Sunday, March 20, 2016

Apache subdomain virtualhosts over SSL

I've been scouring Google over the last couple of days, trying to find out how to setup subdomains over https without having to do IP-based virtualhosts or creating self-signed keys. It turns out the solution is pretty simple: set "NameVirtualHost *:443" (without quotes, of course) at the top of your SSL virtualhost config, and then you can proceed with setting up your virtualhosts as usual (I'm also redirecting all http traffic to https). For example: