zkayser
zkayser

Reputation: 13

Working through RoR Hartl Tutorial — Heroku push failed after adding CarrierWave and setting up AWS

I've been working through Hartl's Ruby on Rails Tutorial and haven't come across any problems until yesterday when I tried to deploy to Heroku after adding the CarrierWave gem and setting up ENV variables for AWS.

According to the build log, precompiling assets failed and the push was rejected. Here is the full build log from Heroku:

-----> Ruby app detected
-----> Compiling Ruby/Rails
-----> Using Ruby version: ruby-2.0.0
 -----> Installing dependencies using 1.9.7
   Running: bundle install --without development:test --path vendor/bundle --binstubs vendor/bundle/bin -j4 --deployment
   Fetching gem metadata from https://rubygems.org/...........
   Fetching version metadata from https://rubygems.org/...
   Fetching dependency metadata from https://rubygems.org/..
   Rubygems 2.0.14 is not threadsafe, so your gems must be installed one at a time. Upgrade to Rubygems 2.1.0 or higher to enable parallel gem installation.
   Using rake 10.4.2
   Using i18n 0.7.0
   Using json 1.8.3
   Using minitest 5.7.0
   Using thread_safe 0.3.5
   Using tzinfo 1.2.2
   Using activesupport 4.2.2
   Using builder 3.2.2
   Using erubis 2.7.0
   Using mini_portile 0.6.2
   Using nokogiri 1.6.6.2
   Using rails-deprecated_sanitizer 1.0.3
   Using rails-dom-testing 1.0.6
   Using loofah 2.0.2
   Using rails-html-sanitizer 1.0.2
   Using actionview 4.2.2
   Using rack 1.6.4
   Using rack-test 0.6.3
   Using actionpack 4.2.2
   Using globalid 0.3.5
   Using activejob 4.2.2
   Using mime-types 2.6.1
   Using mail 2.6.3
   Using actionmailer 4.2.2
   Using activemodel 4.2.2
   Using arel 6.0.2
   Using activerecord 4.2.2
   Using bcrypt 3.1.7
   Using sass 3.4.16
   Using bootstrap-sass 3.2.0.0
   Using will_paginate 3.0.7
   Using bootstrap-will_paginate 0.0.10
   Installing carrierwave 0.10.0
   Using coffee-script-source 1.9.1.1
   Using execjs 2.5.2
   Using coffee-script 2.4.1
   Using thor 0.19.1
   Using railties 4.2.2
   Using coffee-rails 4.1.0
   Installing excon 0.45.4
   Using faker 1.4.2
   Installing formatador 0.2.5
   Installing net-ssh 2.9.2
   Installing net-scp 1.2.1
   Installing fog-core 1.32.0
   Using multi_json 1.11.2
   Installing fog-json 1.0.2
   Installing inflecto 0.0.2
   Installing fog-brightbox 0.8.0
   Installing fog-softlayer 0.4.7
   Installing ipaddress 0.8.0
   Installing fog 1.23.0
   Using jbuilder 2.2.3
   Using jquery-rails 4.0.3
   Installing subexec 0.2.3
   Installing mini_magick 3.8.0
   Using pg 0.17.1
   Using puma 2.11.1
   Using bundler 1.9.7
   Using sprockets 3.2.0
   Using sprockets-rails 2.3.2
   Using rails 4.2.2
   Using rails_serve_static_assets 0.0.4
   Using rails_stdout_logging 0.0.3
   Using rails_12factor 0.0.2
   Using rdoc 4.2.0
   Using tilt 1.4.1
   Using sass-rails 5.0.2
   Using sdoc 0.4.0
   Using turbolinks 2.3.0
   Using uglifier 2.5.3
   Bundle complete! 26 Gemfile dependencies, 71 gems now installed.
   Gems in the groups development and test were not installed.
   Bundled gems are installed into ./vendor/bundle.
   Bundle completed (26.47s)
   Cleaning up the bundler cache.
-----> Preparing app for Rails asset pipeline
   Running: rake assets:precompile
   rake aborted!
   NoMethodError: undefined method `config' for CarrierWave:Module
   /tmp/build_1961905c6733bb602170a23f33bb3199/config/initializers/carrier_wave.rb:2:in `<top (required)>'
   /tmp/build_1961905c6733bb602170a23f33bb3199/vendor/bundle/ruby/2.0.0/gems/activesupport-4.2.2/lib/active_support/dependencies.rb:268:in `load'
   /tmp/build_1961905c6733bb602170a23f33bb3199/vendor/bundle/ruby/2.0.0/gems/activesupport-4.2.2/lib/active_support/dependencies.rb:268:in `block in load'
   /tmp/build_1961905c6733bb602170a23f33bb3199/vendor/bundle/ruby/2.0.0/gems/activesupport-4.2.2/lib/active_support/dependencies.rb:240:in `load_dependency'
   /tmp/build_1961905c6733bb602170a23f33bb3199/vendor/bundle/ruby/2.0.0/gems/activesupport-4.2.2/lib/active_support/dependencies.rb:268:in `load'
   /tmp/build_1961905c6733bb602170a23f33bb3199/vendor/bundle/ruby/2.0.0/gems/railties-4.2.2/lib/rails/engine.rb:652:in `block in load_config_initializer'
   /tmp/build_1961905c6733bb602170a23f33bb3199/vendor/bundle/ruby/2.0.0/gems/activesupport-4.2.2/lib/active_support/notifications.rb:166:in `instrument'
   /tmp/build_1961905c6733bb602170a23f33bb3199/vendor/bundle/ruby/2.0.0/gems/railties-4.2.2/lib/rails/engine.rb:651:in `load_config_initializer'
   /tmp/build_1961905c6733bb602170a23f33bb3199/vendor/bundle/ruby/2.0.0/gems/railties-4.2.2/lib/rails/engine.rb:616:in `block (2 levels) in <class:Engine>'
   /tmp/build_1961905c6733bb602170a23f33bb3199/vendor/bundle/ruby/2.0.0/gems/railties-4.2.2/lib/rails/engine.rb:615:in `each'
   /tmp/build_1961905c6733bb602170a23f33bb3199/vendor/bundle/ruby/2.0.0/gems/railties-4.2.2/lib/rails/engine.rb:615:in `block in <class:Engine>'
   /tmp/build_1961905c6733bb602170a23f33bb3199/vendor/bundle/ruby/2.0.0/gems/railties-4.2.2/lib/rails/initializable.rb:30:in `instance_exec'
   /tmp/build_1961905c6733bb602170a23f33bb3199/vendor/bundle/ruby/2.0.0/gems/railties-4.2.2/lib/rails/initializable.rb:30:in `run'
   /tmp/build_1961905c6733bb602170a23f33bb3199/vendor/bundle/ruby/2.0.0/gems/railties-4.2.2/lib/rails/initializable.rb:55:in `block in run_initializers'
   /tmp/build_1961905c6733bb602170a23f33bb3199/vendor/bundle/ruby/2.0.0/gems/railties-4.2.2/lib/rails/initializable.rb:44:in `each'
   /tmp/build_1961905c6733bb602170a23f33bb3199/vendor/bundle/ruby/2.0.0/gems/railties-4.2.2/lib/rails/initializable.rb:44:in `tsort_each_child'
   /tmp/build_1961905c6733bb602170a23f33bb3199/vendor/bundle/ruby/2.0.0/gems/railties-4.2.2/lib/rails/initializable.rb:54:in `run_initializers'
   /tmp/build_1961905c6733bb602170a23f33bb3199/vendor/bundle/ruby/2.0.0/gems/railties-4.2.2/lib/rails/application.rb:352:in `initialize!'
   /tmp/build_1961905c6733bb602170a23f33bb3199/config/environment.rb:5:in `<top (required)>'
   /tmp/build_1961905c6733bb602170a23f33bb3199/vendor/bundle/ruby/2.0.0/gems/railties-4.2.2/lib/rails/application.rb:328:in `require'
   /tmp/build_1961905c6733bb602170a23f33bb3199/vendor/bundle/ruby/2.0.0/gems/railties-4.2.2/lib/rails/application.rb:328:in `require_environment!'
   /tmp/build_1961905c6733bb602170a23f33bb3199/vendor/bundle/ruby/2.0.0/gems/railties-4.2.2/lib/rails/application.rb:457:in `block in run_tasks_blocks'
   /tmp/build_1961905c6733bb602170a23f33bb3199/vendor/bundle/ruby/2.0.0/gems/sprockets-rails-2.3.2/lib/sprockets/rails/task.rb:64:in `block (2 levels) in define'
   Tasks: TOP => environment
   (See full trace by running task with --trace)
 !
 !     Precompiling assets failed.
 !
 !     Push rejected, failed to compile Ruby app

My initializers/carrier_wave.rb file looks like this:

if Rails.env.production?
  CarrierWave.configure do |config|
    config.fog_credentials = {
      # Configuration for Amazon S3
      :provider              => 'AWS',
      :aws_access_key_id     => ENV['S3_ACCESS_KEY'],
      :aws_secret_access_key => ENV['S3_SECRET_KEY']
    }
    config.fog_directory     =  ENV['S3_BUCKET']
  end
end

I ran rake assets:precompile locally and everything seemed to work fine. The app runs as expected locally as well.

ENV vars were set using

heroku config:set S3_SECRET_KEY=xxxxxxxxxx

Dido for other ENV vars.

For the record, my gemfile is set up as follows:

source 'https://rubygems.org'

gem 'rails',        '4.2.2'
gem 'bcrypt',       '3.1.7'
gem 'faker',        '1.4.2'
gem 'carrierwave',             '0.10.0'
gem 'mini_magick',             '3.8.0'
gem 'fog',                     '1.23.0'
gem 'will_paginate', '3.0.7'
gem 'bootstrap-will_paginate', '0.0.10'
gem 'bootstrap-sass', '3.2.0.0'
gem 'sass-rails',   '5.0.2'
gem 'uglifier',     '2.5.3'
gem 'coffee-rails', '4.1.0'
gem 'jquery-rails', '4.0.3'
gem 'turbolinks',   '2.3.0'
gem 'jbuilder',     '2.2.3'
gem 'sdoc',         '0.4.0', group: :doc

group :development, :test do
  gem 'sqlite3',     '1.3.9'
  gem 'byebug',      '3.4.0'
  gem 'web-console', '2.0.0.beta3'
  gem 'spring',      '1.1.3'
end

group :test do
  gem 'minitest-reporters', '1.0.5'
  gem 'mini_backtrace',     '0.1.3'
  gem 'guard-minitest',     '2.3.1'
end

group :production do
  gem 'pg',             '0.17.1'
  gem 'rails_12factor', '0.0.2'
  gem 'puma',           '2.11.1'
end

I would really appreciate any insight and help with anything I may be missing. Thank you.

Upvotes: 1

Views: 107

Answers (1)

DaveLind
DaveLind

Reputation: 28

I came across the same issue. Found a solution at Configure Carrierwave for Amazon S3 Storage and Heroku

In the carrierwave.rb file, change the

config.fog_directory      = ENV['S3_BUCKET']

to

config.fog_directory      = ENV['S3_BUCKET_NAME']

Upvotes: 1

Related Questions