Deploying Ruby app to Elastic Beanstalk with custom extension, unable to load compiled file -


i've been working on ruby extension project of mine, , i've gotten point i'm ready deploy elastic beanstalk. decided make gem, not because useful else, because i've never made 1 before. anyways, used mkmf in extconfig.rb file compile extension:

# loads mkmf used make makefiles ruby extensions require 'mkmf'  # give name extension_name = 'jeopardy'  create_makefile(extension_name) 

then, gemspec:

gem::specification.new "jeopardy", "0.0.5" |s|   s.name        = 'jeopardy'   s.version     = '0.0.5'   s.date        = '2015-04-26'   s.summary     = "jeopardy game simulator"   s.description = "a fast monte carlo simulation of television game show jeopardy!"   s.authors     = ["devin shelly"]   s.email       = 'devin@devinshelly.com'   s.homepage    =     'http://rubygems.org/gems/jeopardy'   s.license       = 'mit'   s.extensions = %w[ext/jeopardy/extconf.rb]   s.files = ["lib/jeopardy.rb", "lib/jeopardy/jeopardy.bundle"] end 

and finally, rakefile:

require "rake/extensiontask"  rake::extensiontask.new "jeopardy" |ext|   ext.lib_dir = "lib/jeopardy" end  require 'rake/testtask'  rake::testtask.new |t|   t.libs << 'test' end  desc "run tests" task :default => :test 

so anyways, have set there, run rake compile, gem build, gem install, works great. pushed rubygems here (https://rubygems.org/gems/jeopardy), in rails gemfile, throw in gem 'jeopardy'. everything's good, everything's working. however, when try deploy app using elastic beanstalk, following error:

loaderror: cannot load such file -- jeopardy/jeopardy.bundle     /opt/rubies/ruby-2.1.4/lib/ruby/2.1.0/rubygems/core_ext/kernel_require.rb:135:in `require'     /opt/rubies/ruby-2.1.4/lib/ruby/2.1.0/rubygems/core_ext/kernel_require.rb:135:in `rescue in require'     /opt/rubies/ruby-2.1.4/lib/ruby/2.1.0/rubygems/core_ext/kernel_require.rb:144:in `require'     /home/ec2-user/.gem/ruby/2.1.4/gems/jeopardy-0.0.5/lib/jeopardy.rb:238:in `<top (required)>'     /opt/rubies/ruby-2.1.4/lib/ruby/2.1.0/rubygems/core_ext/kernel_require.rb:135:in `require'     /opt/rubies/ruby-2.1.4/lib/ruby/2.1.0/rubygems/core_ext/kernel_require.rb:135:in `rescue in require'     /opt/rubies/ruby-2.1.4/lib/ruby/2.1.0/rubygems/core_ext/kernel_require.rb:144:in `require'     (irb):1     /opt/rubies/ruby-2.1.4/bin/irb:11:in `<main>' 

that points last line in lib/jeopardy.rb file, simply

require "jeopardy/jeopardy.bundle" 

so, that's line loads extension after i've defined classes , methods c extension uses. if ssh elastic beanstalk instance , check out gem directory, file exist, won't load reason. i'm running osx on dev machine , linux on eb instance, fwiw. know why requiring file fails there when works on machine?

edit: did playing around, if remove line installed version on eb instance, loads. if create .rb file , require main jeopardy.rb file, loads. if require_relative .bundle file, still won't load. so, it's not issue finding file, doesn't .bundle file reason.

alright, figured out. so, code compiled .bundle file, that's osx specific file. needed include .h , .c files in gemspec, build gem. then, when installing gem, files built (which in case of linux, .so file). needed add following line extconfig.rb

$cflags += " -std=c99" 

otherwise, when attempting install gem on linux, getting errors.