Учебник RoR Майкла Хартла (3-й) - Произошла ошибка при установке sqlite3, и Bundler не может продолжить

Другие задавали подобные вопросы раньше, но никто не использовал IDE cloud9. Я пробовал решения других вопросов, но все еще не могу заставить его работать.

Я делаю учебник Майкла Хартла по Ruby on Rails (3-й) и использую IDE cloud9 (поскольку я запускаю ОС Windows).

Когда я пытаюсь отправить свою основную ветку с Bitbucket на Heroku.

$ git push heroku master

Я получаю сообщение об ошибке:

An error occurred while installing sqlite3 (1.3.11), and Bundler cannot continue.

Я понимаю, что Heroku не поддерживает sqlite. Но я очень внимательно следил за уроком. И я не вижу, где я ошибся.

Вот полный код:

kpscowley:~/workspace/hello_app2 (master) $ git push heroku master
Counting objects: 66, done.
Delta compression using up to 8 threads.
Compressing objects: 100% (55/55), done.
Writing objects: 100% (66/66), 16.75 KiB | 0 bytes/s, done.
Total 66 (delta 3), reused 0 (delta 0)
remote: Compressing source files... done.
remote: Building source:
remote: 
remote: -----> Ruby app detected
remote: -----> Compiling Ruby/Rails
remote: -----> Using Ruby version: ruby-2.0.0
remote: -----> Installing dependencies using bundler 1.9.7
remote:        Running: bundle install --without development:test --path             vendor/bundle --binstubs vendor/bundle/bin -j4 --deployment
remote:        Fetching gem metadata from https://rubygems.org/...........
remote:        Fetching version metadata from https://rubygems.org/...
remote:        Fetching dependency metadata from https://rubygems.org/..
remote:        Rubygems 2.0.14.1 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.
remote:        Installing rake 10.4.2
remote:        Installing i18n 0.7.0
remote:        Installing json 1.8.3
remote:        Installing minitest 5.8.3
remote:        Installing thread_safe 0.3.5
remote:        Installing tzinfo 1.2.2
remote:        Installing activesupport 4.2.2
remote:        Installing builder 3.2.2
remote:        Installing erubis 2.7.0
remote:        Installing mini_portile2 2.0.0
remote:        Installing nokogiri 1.6.7.1
remote:        Installing rails-deprecated_sanitizer 1.0.3
remote:        Installing rails-dom-testing 1.0.7
remote:        Installing loofah 2.0.3
remote:        Installing rails-html-sanitizer 1.0.2
remote:        Installing actionview 4.2.2
remote:        Installing rack 1.6.4
remote:        Installing rack-test 0.6.3
remote:        Installing actionpack 4.2.2
remote:        Installing globalid 0.3.6
remote:        Installing activejob 4.2.2
remote:        Installing mime-types 2.99
remote:        Installing mail 2.6.3
remote:        Installing actionmailer 4.2.2
remote:        Installing activemodel 4.2.2
remote:        Installing arel 6.0.3
remote:        Installing activerecord 4.2.2
remote:        Installing coffee-script-source 1.10.0
remote:        Installing execjs 2.6.0
remote:        Installing coffee-script 2.4.1
remote:        Installing thor 0.19.1
remote:        Installing railties 4.2.2
remote:        Installing coffee-rails 4.1.1
remote:        Installing concurrent-ruby 1.0.0
remote:        Installing multi_json 1.11.2
remote:        Installing jbuilder 2.3.2
remote:        Installing jquery-rails 4.0.5
remote:        Using bundler 1.9.7
remote:        Installing sprockets 3.5.2
remote:        Installing sprockets-rails 3.0.0
remote:        Installing rails 4.2.2
remote:        Installing rdoc 4.2.1
remote:        Installing sass 3.4.20
remote:        Installing tilt 2.0.1
remote:        Installing sass-rails 5.0.4
remote:        Installing sdoc 0.4.1
remote:        Gem::Installer::ExtensionBuildError: ERROR: Failed to build gem native extension.
remote:        /tmp/build_287067056d8f395e2b2b5684ca54eff3/vendor/ruby-2.0.0/bin/ruby extconf.rb
remote:        checking for sqlite3.h... no
remote:        sqlite3.h is missing. Try 'port install sqlite3 +universal',
remote:        'yum install sqlite-devel' or 'apt-get install libsqlite3-dev'
remote:        and check your shared library search path (the
remote:        location where your sqlite3 shared library is located).
remote:        *** extconf.rb failed ***
remote:        Could not create Makefile due to some reason, probably lack of necessary
remote:        libraries and/or headers.  Check the mkmf.log file for more details.  You may
remote:        need configuration options.
remote:        Provided configuration options:
remote:        --with-opt-dir
remote:        --without-opt-dir
remote:        --with-opt-include
remote:        --without-opt-include=${opt-dir}/include
remote:        --with-opt-lib
remote:        --without-opt-lib=${opt-dir}/lib
remote:        --with-make-prog
remote:        --without-make-prog
remote:        --srcdir=.
remote:        --curdir
remote:        --ruby=/tmp/build_287067056d8f395e2b2b5684ca54eff3/vendor/ruby-2.0.0/bin/ruby
remote:        --with-sqlite3-dir
remote:        --without-sqlite3-dir
remote:        --with-sqlite3-include
remote:        --without-sqlite3-include=${sqlite3-dir}/include
remote:        --with-sqlite3-lib
remote:        --without-sqlite3-lib=${sqlite3-dir}/
remote:        Gem files will remain installed in /tmp/build_287067056d8f395e2b2b5684ca54eff3/vendor/bundle/ruby/2.0.0/gems/sqlite3-1.3.11 for inspection.
remote:        Results logged to /tmp/build_287067056d8f395e2b2b5684ca54eff3/vendor/bundle/ruby/2.0.0/gems/sqlite3-1.3.11/ext/sqlite3/gem_make.out
remote:        An error occurred while installing sqlite3 (1.3.11), and Bundler cannot
remote:        continue.
remote:        Make sure that `gem install sqlite3 -v '1.3.11'` succeeds before bundling.
remote:        Bundler Output: Fetching gem metadata from https://rubygems.org/...........
remote:        Fetching version metadata from https://rubygems.org/...
remote:        Fetching dependency metadata from https://rubygems.org/..
remote:        Rubygems 2.0.14.1 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.
remote:        Installing rake 10.4.2
remote:        Installing i18n 0.7.0
remote:        Installing json 1.8.3
remote:        Installing minitest 5.8.3
remote:        Installing thread_safe 0.3.5
remote:        Installing tzinfo 1.2.2
remote:        Installing activesupport 4.2.2
remote:        Installing builder 3.2.2
remote:        Installing erubis 2.7.0
remote:        Installing mini_portile2 2.0.0
remote:        Installing nokogiri 1.6.7.1
remote:        Installing rails-deprecated_sanitizer 1.0.3
remote:        Installing rails-dom-testing 1.0.7
remote:        Installing loofah 2.0.3
remote:        Installing rails-html-sanitizer 1.0.2
remote:        Installing actionview 4.2.2
remote:        Installing rack 1.6.4
remote:        Installing rack-test 0.6.3
remote:        Installing actionpack 4.2.2
remote:        Installing globalid 0.3.6
remote:        Installing activejob 4.2.2
remote:        Installing mime-types 2.99
remote:        Installing mail 2.6.3
remote:        Installing actionmailer 4.2.2
remote:        Installing activemodel 4.2.2
remote:        Installing arel 6.0.3
remote:        Installing activerecord 4.2.2
remote:        Installing coffee-script-source 1.10.0
remote:        Installing execjs 2.6.0
remote:        Installing coffee-script 2.4.1
remote:        Installing thor 0.19.1
remote:        Installing railties 4.2.2
remote:        Installing coffee-rails 4.1.1
remote:        Installing concurrent-ruby 1.0.0
remote:        Installing multi_json 1.11.2
remote:        Installing jbuilder 2.3.2
remote:        Installing jquery-rails 4.0.5
remote:        Using bundler 1.9.7
remote:        Installing sprockets 3.5.2
remote:        Installing sprockets-rails 3.0.0
remote:        Installing rails 4.2.2
remote:        Installing rdoc 4.2.1
remote:        Installing sass 3.4.20
remote:        Installing tilt 2.0.1
remote:        Installing sass-rails 5.0.4
remote:        Installing sdoc 0.4.1
remote:        
remote:        Gem::Installer::ExtensionBuildError: ERROR: Failed to build gem native extension.
remote:        
remote:        /tmp/build_287067056d8f395e2b2b5684ca54eff3/vendor/ruby-2.0.0/bin/ruby extconf.rb
remote:        checking for sqlite3.h... no
remote:        sqlite3.h is missing. Try 'port install sqlite3 +universal',
remote:        'yum install sqlite-devel' or 'apt-get install libsqlite3-dev'
remote:        and check your shared library search path (the
remote:        location where your sqlite3 shared library is located).
remote:        *** extconf.rb failed ***
remote:        Could not create Makefile due to some reason, probably lack of necessary
remote:        libraries and/or headers.  Check the mkmf.log file for more details.  You may
remote:        need configuration options.
remote:        
remote:        Provided configuration options:
remote:        --with-opt-dir
remote:        --without-opt-dir
remote:        --with-opt-include
remote:        --without-opt-include=${opt-dir}/include
remote:        --with-opt-lib
remote:        --without-opt-lib=${opt-dir}/lib
remote:        --with-make-prog
remote:        --without-make-prog
remote:        --srcdir=.
remote:        --curdir
remote:        --ruby=/tmp/build_287067056d8f395e2b2b5684ca54eff3/vendor/ruby-2.0.0/bin/ruby
remote:        --with-sqlite3-dir
remote:        --without-sqlite3-dir
remote:        --with-sqlite3-include
remote:        --without-sqlite3-include=${sqlite3-dir}/include
remote:        --with-sqlite3-lib
remote:        --without-sqlite3-lib=${sqlite3-dir}/
remote:        
remote:        
remote:        Gem files will remain installed in /tmp/build_287067056d8f395e2b2b5684ca54eff3/vendor/bundle/ruby/2.0.0/gems/sqlite3-1.3.11 for inspection.
remote:        Results logged to /tmp/build_287067056d8f395e2b2b5684ca54eff3/vendor/bundle/ruby/2.0.0/gems/sqlite3-1.3.11/ext/sqlite3/gem_make.out
remote:        An error occurred while installing sqlite3 (1.3.11), and Bundler cannot
remote:        continue.
remote:        Make sure that `gem install sqlite3 -v '1.3.11'` succeeds before bundling.
remote:  !
remote:  !     Failed to install gems via Bundler.
remote:  !     
remote:  !     Detected sqlite3 gem which is not supported on Heroku.
remote:  !     https://devcenter.heroku.com/articles/sqlite3
remote:  !
remote: 
remote:  !     Push rejected, failed to compile Ruby app
remote: 
remote: Verifying deploy...
remote: 
remote: !       Push rejected to powerful-reaches-4422.
remote: 
To https://git.heroku.com/powerful-reaches-4422.git
 ! [remote rejected] master -> master (pre-receive hook declined)
error: failed to push some refs to 'https://git.heroku.com/powerful-reaches-4422.git'

Также см. мой Gemfile:

source 'https://rubygems.org'

gem 'rails',        '4.2.2'
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 :production do
  gem 'pg',             '0.17.1'
  gem 'rails_12factor', '0.0.2'
end

И Gemfile.lock:

GEM
  remote: https://rubygems.org/
  specs:
actionmailer (4.2.2)
  actionpack (= 4.2.2)
  actionview (= 4.2.2)
  activejob (= 4.2.2)
  mail (~> 2.5, >= 2.5.4)
  rails-dom-testing (~> 1.0, >= 1.0.5)
actionpack (4.2.2)
  actionview (= 4.2.2)
  activesupport (= 4.2.2)
  rack (~> 1.6)
  rack-test (~> 0.6.2)
  rails-dom-testing (~> 1.0, >= 1.0.5)
  rails-html-sanitizer (~> 1.0, >= 1.0.1)
actionview (4.2.2)
  activesupport (= 4.2.2)
  builder (~> 3.1)
  erubis (~> 2.7.0)
  rails-dom-testing (~> 1.0, >= 1.0.5)
  rails-html-sanitizer (~> 1.0, >= 1.0.1)
activejob (4.2.2)
  activesupport (= 4.2.2)
  globalid (>= 0.3.0)
activemodel (4.2.2)
  activesupport (= 4.2.2)
  builder (~> 3.1)
activerecord (4.2.2)
  activemodel (= 4.2.2)
  activesupport (= 4.2.2)
  arel (~> 6.0)
activesupport (4.2.2)
  i18n (~> 0.7)
  json (~> 1.7, >= 1.7.7)
  minitest (~> 5.1)
  thread_safe (~> 0.3, >= 0.3.4)
  tzinfo (~> 1.1)
arel (6.0.3)
binding_of_caller (0.7.2)
  debug_inspector (>= 0.0.1)
builder (3.2.2)
byebug (8.2.1)
coffee-rails (4.1.1)
  coffee-script (>= 2.2.0)
  railties (>= 4.0.0, < 5.1.x)
coffee-script (2.4.1)
  coffee-script-source
  execjs
coffee-script-source (1.10.0)
concurrent-ruby (1.0.0)
debug_inspector (0.0.2)
erubis (2.7.0)
execjs (2.6.0)
globalid (0.3.6)
  activesupport (>= 4.1.0)
i18n (0.7.0)
jbuilder (2.3.2)
  activesupport (>= 3.0.0, < 5)
  multi_json (~> 1.2)
jquery-rails (4.0.5)
  rails-dom-testing (~> 1.0)
  railties (>= 4.2.0)
  thor (>= 0.14, < 2.0)
json (1.8.3)
loofah (2.0.3)
  nokogiri (>= 1.5.9)
mail (2.6.3)
  mime-types (>= 1.16, < 3)
mime-types (2.99)
mini_portile2 (2.0.0)
minitest (5.8.3)
multi_json (1.11.2)
nokogiri (1.6.7.1)
  mini_portile2 (~> 2.0.0.rc2)
rack (1.6.4)
rack-test (0.6.3)
  rack (>= 1.0)
rails (4.2.2)
  actionmailer (= 4.2.2)
  actionpack (= 4.2.2)
  actionview (= 4.2.2)
  activejob (= 4.2.2)
  activemodel (= 4.2.2)
  activerecord (= 4.2.2)
  activesupport (= 4.2.2)
  bundler (>= 1.3.0, < 2.0)
  railties (= 4.2.2)
  sprockets-rails
rails-deprecated_sanitizer (1.0.3)
  activesupport (>= 4.2.0.alpha)
rails-dom-testing (1.0.7)
  activesupport (>= 4.2.0.beta, < 5.0)
  nokogiri (~> 1.6.0)
  rails-deprecated_sanitizer (>= 1.0.1)
rails-html-sanitizer (1.0.2)
  loofah (~> 2.0)
railties (4.2.2)
  actionpack (= 4.2.2)
  activesupport (= 4.2.2)
  rake (>= 0.8.7)
  thor (>= 0.18.1, < 2.0)
rake (10.4.2)
rdoc (4.2.1)
  json (~> 1.4)
sass (3.4.20)
sass-rails (5.0.4)
  railties (>= 4.0.0, < 5.0)
  sass (~> 3.1)
  sprockets (>= 2.8, < 4.0)
  sprockets-rails (>= 2.0, < 4.0)
  tilt (>= 1.1, < 3)
sdoc (0.4.1)
  json (~> 1.7, >= 1.7.7)
  rdoc (~> 4.0)
spring (1.6.1)
sprockets (3.5.2)
  concurrent-ruby (~> 1.0)
  rack (> 1, < 3)
sprockets-rails (3.0.0)
  actionpack (>= 4.0)
  activesupport (>= 4.0)
  sprockets (>= 3.0.0)
sqlite3 (1.3.11)
thor (0.19.1)
thread_safe (0.3.5)
tilt (2.0.1)
turbolinks (2.5.3)
  coffee-rails
tzinfo (1.2.2)
  thread_safe (~> 0.1)
uglifier (2.7.2)
  execjs (>= 0.3.0)
  json (>= 1.8.0)
web-console (2.2.1)
  activemodel (>= 4.0)
  binding_of_caller (>= 0.7.2)
  railties (>= 4.0)
  sprockets-rails (>= 2.0, < 4.0)

PLATFORMS
  ruby

DEPENDENCIES
  byebug
  coffee-rails (~> 4.1.0)
  jbuilder (~> 2.0)
  jquery-rails
  rails (= 4.2.2)
  sass-rails (~> 5.0)
  sdoc (~> 0.4.0)
  spring
  sqlite3
  turbolinks
  uglifier (>= 1.3.0)
  web-console (~> 2.0)

Любая помощь будет высоко оценена, спасибо.


person K.Cowley    schedule 22.12.2015    source источник
comment
Возможно, причина в том, что gemfile.lock имеет sqlite3 в качестве зависимости. Вы можете регенерировать его?   -  person Mutahhir    schedule 23.12.2015


Ответы (3)


Heroku работает только с PostgreSQL. Вы можете продолжать использовать sqlite3 локально, но вам нужно переключиться на pg на Heroku.

group :development, :test do
    gem 'sqlite3'
    end
group :production do
  gem 'pg'
end

Затем удалите

`Gemfile.lock`

Затем запустите

bundle install --without production

Не забудьте зафиксировать Gemfile и Gemfile.lock локальному мастеру перед отправкой в ​​Heroku.

person Mihai Dinculescu    schedule 22.12.2015
comment
Спасибо, Михай. Я понимаю про sqlite3 и pg, это отражено в моем Gemfile (см. выше). Я запустил установку пакета $ --без производства, а затем зафиксировал. Все еще получаю ту же ошибку. - person K.Cowley; 23.12.2015
comment
Для фиксации я использую $ git commit -m "x" , это правильно? - person K.Cowley; 23.12.2015
comment
Да, именно так вы совершаете. Попробуйте удалить Gemfile.lock и снова запустить bundle install. - person Mihai Dinculescu; 23.12.2015
comment
@Mihai-Andrei Dinculescu Большое спасибо . Это сработало!!! Для тех, у кого есть подобные проблемы. Я пробовал много решений, но ничего не помогало, я даже начал с нуля. Это то, что сработало для меня, большое спасибо Mihai-Andrei Dinculescu. Удалите Gemfile.lock. Затем запустите $ bundle install --without production, затем вам нужно будет зафиксировать этот $ git commit -a -m "Your Message". Как только это будет сделано, нажмите на Heroku, запустив $ git push heroku master. - person K.Cowley; 23.12.2015

вы обновили свой Gemfile.lock перед отправкой? если не обновлять его run bundle update. удачи дружище!

person mrvncaragay    schedule 22.12.2015
comment
Спасибо, Marv-c, я запустил его, но все равно получаю ту же ошибку. - person K.Cowley; 23.12.2015

Читаю одну и ту же книгу! Я столкнулся с той же проблемой. Я исправил это, убедившись, что драгоценные камни вне групп в файле Gemfile не включают sqlite3 (выше разработки и производства), sqlite 3 следует размещать только один раз и в группе разработки. Если вы попытались развернуть свое приложение на героку, это может вызвать проблемы. Чтобы исправить это, убедитесь, что sqlite указан только как:

group :development, :test do

 .
 .
gem 'sqlite3'
 .
 .

end

а затем продолжите удаление Gemfile.lock (поскольку была допущена ошибка, sqlite3 будет указан как зависимость в Gemfile.lock, и его необходимо будет повторно создать, он был удален путем установки пакета), затем выполните установку пакета :

bundle install --without production

(--без производства размещается, поэтому мы не устанавливаем локально драгоценные камни, которые нам не понадобятся) Завершите, добавив, зафиксировав и отправив свои изменения, а затем развернув их на героку. Теперь у вас не должно быть проблем.

person Community    schedule 25.05.2016