I am trying to push a small test app to Heroku. Here is the App and the Gem file:
我正在尝试将一个小测试应用程序推送到Heroku。这是App和Gem文件:
App:
应用程序:
require 'sinatra'
require 'haml'
require 'rdiscount'
set :markdown, :layout_engine => :haml, :layout => :layout
get '/' do
haml :index
end
get '/blog' do
markdown :test
end
Gemfile:
的Gemfile:
source :rubygems
gem 'sinatra'
gem 'thin'
gem 'haml'
gem 'rdiscount'
Before pushing to Heroku I run bundle install
. But pushing to Heroku fails when trying to install the rdiscount gem:
在推送到Heroku之前,我运行了bundle install。但是在尝试安装rdiscount gem时,推送到Heroku会失败:
-----> Ruby/Rack app detected
-----> Installing dependencies using Bundler version 1.3.0.pre.5
Running: bundle install --without development:test --path vendor/bundle --binstubs vendor/bundle/bin --deployment
Fetching gem metadata from http://rubygems.org/..........
Fetching gem metadata from http://rubygems.org/..
Using daemons (1.1.9)
Using eventmachine (1.0.0)
Using haml (3.1.7)
Using rack (1.4.3)
Using rack-protection (1.3.2)
installing rdiscount (2.0.7)
Gem::Installer::ExtensionBuildError: ERROR: Failed to build gem native extension.
/usr/local/bin/ruby extconf.rb
checking for random()... yes
checking for srandom()... yes
checking for rand()... yes
checking for srand()... yes
checking size of unsigned long... long
checking size of unsigned int... int
no int with size 4
*** extconf.rb failed ***
Could not create Makefile due to some reason, probably lack of
necessary libraries and/or headers. Check the mkmf.log file for more
details. You may need configuration options.
Provided configuration options:
--with-opt-dir
--without-opt-dir
--with-opt-include
--without-opt-include=${opt-dir}/include
--with-opt-lib
--without-opt-lib=${opt-dir}/lib
--with-make-prog
--without-make-prog
--srcdir=.
--curdir
--ruby=/usr/local/bin/ruby
--with-rdiscount-dir
--without-rdiscount-dir
--with-rdiscount-include
--without-rdiscount-include=${rdiscount-dir}/include
--with-rdiscount-lib
--without-rdiscount-lib=${rdiscount-dir}/lib
Gem files will remain installed in /tmp/build_3aijv3ga0dy1y/vendor/bundle/ruby/1.9.1/gems/rdiscount-2.0.7 for inspection.
Results logged to /tmp/build_3aijv3ga0dy1y/vendor/bundle/ruby/1.9.1/gems/rdiscount-2.0.7/ext/gem_make.out
An error occurred while installing rdiscount (2.0.7), and Bundler cannot continue.
Make sure that `gem install rdiscount -v '2.0.7'` succeeds before bundling.
!
! Failed to install gems via Bundler.
!
! Heroku push rejected, failed to compile Ruby/rack app
I do understand that rdiscount might depend on some other Gems or libraries and this dependency does not seem to be resolved. However, I do not understand how to solve this problem. Could you give me some advice on how to get this to work?
我确实理解rdiscount可能依赖于其他一些Gems或库,并且这种依赖性似乎无法解决。但是,我不明白如何解决这个问题。你能就如何让它发挥作用给我一些建议吗?
1 个解决方案
#1
27
There seems to be an issue with Ruby 1.9.2 on Heroku and how may bytes it thinks int is.
在Heroku上似乎存在Ruby 1.9.2的问题以及它认为int的字节数是多少。
Try to add ruby "1.9.3"
to you Gemfile like this:
尝试将ruby“1.9.3”添加到您的Gemfile中,如下所示:
source :rubygems
ruby "1.9.3"
gem 'sinatra'
gem 'thin'
gem 'haml'
gem 'rdiscount'
My own testing reproduced your error on 1.9.2 and succeeded on 1.9.3
我自己的测试在1.9.2上重现了你的错误并在1.9.3上成功了
#1
27
There seems to be an issue with Ruby 1.9.2 on Heroku and how may bytes it thinks int is.
在Heroku上似乎存在Ruby 1.9.2的问题以及它认为int的字节数是多少。
Try to add ruby "1.9.3"
to you Gemfile like this:
尝试将ruby“1.9.3”添加到您的Gemfile中,如下所示:
source :rubygems
ruby "1.9.3"
gem 'sinatra'
gem 'thin'
gem 'haml'
gem 'rdiscount'
My own testing reproduced your error on 1.9.2 and succeeded on 1.9.3
我自己的测试在1.9.2上重现了你的错误并在1.9.3上成功了