Не удалось выполнить развертывание Heroku из-за ошибки sqlite3 gem - программирование

Не удалось выполнить развертывание Heroku из-за ошибки sqlite3 gem

Я только что запустил книгу ruby.railstutorial.org Майкла Хартла и работал в первой главе. Я использую Mac OS OS X, Terminal и Sublime Text. Все прошло согласно плану, пока не пришло время протестировать развертывание в Хероку. Я могу подключиться к Heroku и запустить команду $ git push heroku master. Но развертывание не выполняется:

Installing sqlite3 (1.3.5) with native extensions
       Gem::Installer::ExtensionBuildError: ERROR: Failed to build gem native extension.
       /usr/local/bin/ruby extconf.rb
       checking for sqlite3.h... no
       sqlite3.h is missing. Try 'port install sqlite3 +universal'
       or 'yum install sqlite-devel' and check your shared library search path (the
       location where your sqlite3 shared library is located).
       *** 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:


An error occurred while installing sqlite3 (1.3.5), and Bundler cannot continue.
       Make sure that `gem install sqlite3 -v '1.3.5'` succeeds before bundling.
 !
 !     Failed to install gems via Bundler.
 !     
 !     Detected sqlite3 gem which is not supported on Heroku.
 !     http://devcenter.heroku.com/articles/how-do-i-use-sqlite3-for-development
 !
 !     Heroku push rejected, failed to compile Ruby/rails app

Вот мой Gemfile

source 'https://rubygems.org'

       gem 'rails', '3.2.8'

       # Bundle edge Rails instead:
       # gem 'rails', :git => 'git://github.com/rails/rails.git'

       group :development, :test do
   gem 'sqlite3', '1.3.5'
       end


       # Gems used only for assets and not required
       # in production environments by default.
       group :assets do
       gem 'sass-rails',   '~> 3.2.5'
       gem 'coffee-rails', '~> 3.2.2'

       # See https://github.com/sstephenson/execjs#readme for more supported runtimes
       # gem 'therubyracer', :platforms => :ruby

       gem 'uglifier', '>= 1.2.3'
       end

       gem 'jquery-rails', '2.0.2'

       group :production do
   gem 'pg', '0.12.2'
       end

       # To use ActiveModel has_secure_password
       # gem 'bcrypt-ruby', '~> 3.0.0'

       # To use Jbuilder templates for JSON
       # gem 'jbuilder'

       # Use unicorn as the app server
       # gem 'unicorn'

       # Deploy with Capistrano
       # gem 'capistrano'

       # To use debugger
       # gem 'debugger'

У меня есть sqlite3, предназначенный для разработки, а не для производства, поэтому я думал, что Heroku просто проигнорирует все это вместе, но это, похоже, не так.

Кроме того, когда я создаю пакет, который я использую   $ bundle install - без производства

Я знаю, что некоторые люди предложили просто установить PG и использовать это, но я действительно хочу как можно больше придерживаться учебника, прежде чем отправиться на прогулку и попробовать другой подход.

Я немного потерял в данный момент, и не уверен, как исходить отсюда. Любая помощь, которую вы можете предоставить, будет оценена по достоинству.

Спасибо

4b9b3361

Ответ 1

Героку не может установить камень sqlite3 по любой причине. Но вы можете сказать bundler, что он не должен пытаться, кроме как при разработке.

В Gemfile замените gem 'sqlite3' на:

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

Тогда bundler на heroku, запущенный как production, не будет пытаться установить его.

Ответ 2

Наконец-то я смог успешно развернуться в Heroku. Спасибо evanc3 за указание на статью на сайте Heroku. Похоже, что я просто забыл передать свои обновления Gemgile перед тем, как приступить к Heroku. Поэтому для всех вас, только начинающих, вам нужно убедиться, что вы внесете свои изменения, прежде чем развертывать их в Heroku.

Ответ 3

Heroku не поддерживает sqlite3...

Удалите sqlite3 из своего Gemfile, вместо этого используйте pg gem. Сделайте следующее изменение в файле gem

измените следующее в Gemfile

gem 'sqlite3'

к

gem 'pg' #you will have to install postgresql

Важно: Запустите

git add .
git commit 
git push heroku master

Примечание. Если вы планируете развертывать для heroku, я предлагаю также использовать postgres на этапе разработки также (установить postgresql на вашем компьютере), heroku предпочитает psql.

Если вы хотите использовать sqllite для разработки и postgresql для Heroku, используйте следующую конфигурацию.

group :development do 
   gem 'sqlite3'    #gem to use in development environment
end

group :production do 
  gem 'pg'         #gem to use in production environment
end

Heroku будет использовать драгоценный камень pg, так как heroku запускает ваше приложение в производственной среде

Ответ 4

В Heroku ваше приложение не имеет доступа к файловой системе. Для этого существует ряд причин - в основном из-за того, что вы можете масштабировать производительность своего приложения, добавляя новые экземпляры (т.е. Запуская сразу несколько серверов), и эти экземпляры не гарантируются на одной физической машине - копирование файлы будут очень медленными.

SQLite просто сохраняет базу данных в файл в вашей папке db/, поэтому она несовместима с Heroku.

Лучший вариант, как предлагается в ссылке справки, заключается в том, чтобы отойти от SQLite, потому что иногда возникают нечеткие несовместимости между SQLite и PostgreSQL (база данных Heroku), и вы хотите это узнать до развертывания на производстве!

После установки PostgreSQL (как это сделать зависит от вашей ОС), а затем добавьте gem 'pg' в свой Gemfile.

Ответ 5

У меня есть решение, если у вас нет sqlite3 непосредственно в вашем gemfile, и вы все еще получаете эту ошибку.

Скорее всего, у вас есть драгоценный камень, который использует sqlite3 как зависимость, и он включает драгоценный камень, если вы не знаете.

1) Перейдите в Gemfile.lock и выполните поиск sqlite.

2) Найдите, какой камень использует sqlite, затем переместите драгоценный камень в группу разработки или тестирования.

3) Связка