Ошибка загрузки адаптера Active Record sqlite3. когда я разверну в Heroku - PullRequest
0 голосов
/ 24 января 2020

У меня проблема при развертывании в Heroku:

/app/vendor/bundle/ruby/2.6.0/gems/bundler-1.17.3/lib/bundler/rubygems_integration.rb:408:in `block (2 levels) in replace_gem': Error loading the 'sqlite3' Active Record adapter. Missing a gem it depends on? sqlite3 is not part of the bundle. Add it to your Gemfile. (LoadError)

Я пытался следовать инструкциям, где мне нужно понизить версию SQLite3, но не работает, также я читаю решения, в которых я должен использовать Rails 5.2, но я сейчас на 6.0. Есть ли возможность заставить его работать с Rails 6?

Это мой Gemfile:

source 'https://rubygems.org'
git_source(:github) { |repo| "https://github.com/#{repo}.git" }

ruby '2.6.3'


gem 'rails', '6.0.1'
gem 'autoprefixer-rails', '9.6.1.1'
gem 'uglifier',     '3.2.0'
gem 'coffee-rails', '5.0.0'
gem 'jquery-rails', '4.3.5'
gem 'mini_magick', '4.9.5'
gem 'will_paginate', '3.2.1'
gem 'bootstrap-will_paginate', '1.0.0'
gem 'bootstrap-sass', '3.4.1'
gem 'puma', '4.3.1'
gem 'font-awesome-rails', '4.7.0.5'
gem 'sass-rails', '6'
gem 'webpacker', '4.0'
gem 'turbolinks', '5'
gem 'jbuilder', '2.9.1'
gem 'rubocop', '0.77.0'
gem 'bootsnap', '1.4.2', require: false

group :development, :test do
  gem 'sqlite3', '~> 1.3.6'
  gem 'byebug', platforms: %i[mri mingw x64_mingw]
end

group :development do
  gem 'web-console', '3.3.0'
  gem 'listen', '3.2.0'
  gem 'spring'
  gem 'spring-watcher-listen', '2.0.0'
end

group :test do
  gem 'capybara',           '3.28.0'
  gem 'selenium-webdriver', '3.142.4'
  gem 'webdrivers',         '4.1.2'
end

group :production do
  gem 'pg',  '0.20.0'
  # gem 'fog', '1.42'
end

# Windows does not include zoneinfo files, so bundle the tzinfo-data gem
gem 'tzinfo-data', platforms: [:mingw, :mswin, :x64_mingw, :jruby]

, а это мой database.yml:

# SQLite. Versions 3.8.0 and up are supported.
#   gem install sqlite3
#
#   Ensure the SQLite 3 gem is defined in your Gemfile
#   gem 'sqlite3'
#
default: &default
  adapter: sqlite3
  pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
  timeout: 5000

development:
  <<: *default
  database: db/development.sqlite3

# Warning: The database defined as "test" will be erased and
# re-generated from your development database when you run "rake".
# Do not set this db to the same as development or production.
test:
  <<: *default
  database: db/test.sqlite3

production:
  <<: *default
  database: db/production.sqlite3

Ответы [ 4 ]

3 голосов
/ 24 января 2020

Вы должны удалить SQLite из вашего приложения и использовать Postgres при разработке, тестировании и производстве. Есть много мелких несовместимостей между RDBMS, и вы не хотите обнаруживать их, когда запускаете ваше приложение в производство.

1. Установите Postgres в локальной системе.

Как это сделать, зависит от вашей системы. OS-X и Windows имеют простые установщики. На Linux вы должны установить его через менеджер пакетов.

2. Удалите драгоценный камень sqlite.

# remove
gem 'sqlite3', '~> 1.3.6'

# add
gem 'pg', '~> 0.18.4' # check rubygems.org for the latest version

Запустите bundle update, чтобы восстановить Bundle.lock.

3. Настройте database.yml

default: &default
  adapter: postgresql
  pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
  timeout: 5000

development:
  <<: *default
  database: 'my_app_development'

# Warning: The database defined as "test" will be erased and
# re-generated from your development database when you run "rake".
# Do not set this db to the same as development or production.
test:
  <<: *default
  database: 'my_app_test'

# On Heroku you don't need the production section as it provides everything through 
# ENV["DATABASE_URL"]
# Heroku sets pretty good defaults as well so YAGNI.

4. Фиксация и пу sh

0 голосов
/ 24 января 2020

Вы указываете sqlite3 в качестве адаптера по умолчанию в разделе default: вашего database.yml:

default: &default
  adapter: sqlite3
  pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
  timeout: 5000

, что приводит к вашей ошибке, поскольку sqlite3 не установлен в производстве.

Вам следует перейти по ссылке, которую Себастьян Пальма предоставляет в комментариях. Там вы найдете обсуждение того, как настроить ваше приложение для использования PostgreSQL в Heroku.

0 голосов
/ 24 января 2020

Heroku изначально не поддерживает SQLite3.

Сначала откройте ваш Gemfile и удалите эту строку:

gem 'sqlite3'

Замените на эту строку:

gem 'pg'

Затем запустите bundle install.

Далее вам нужно будет конвертировать config/database.yml. Откройте существующий файл, который может выглядеть примерно так:

development:
  adapter: sqlite3
  database: db/development.sqlite3
  pool: 5
  timeout: 5000

test:
  adapter: sqlite3
  database: db/test.sqlite3
  pool: 5
  timeout: 5000

production:
  adapter: sqlite3
  database: db/production.sqlite3
  pool: 5
  timeout: 5000

Вам потребуется изменить адаптер с

adapter: sqlite3

на этот:

adapter: postgresql

Обратите внимание, что имя адаптера postgresql не postgres или pg. Вам также необходимо изменить database: на произвольное имя. Окончательная версия может выглядеть примерно так:

default: &default
  adapter: postgresql
  encoding: unicode
  pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
  timeout: 5000

development:
  <<: *default
  database: my_database_development

test:
  <<: *default
  database: my_database_test

production:
  <<: *default
  database: my_database_production

После того, как вы установили гем pg и перенесли файл config/database.yml, вам потребуется создать базу данных и выполнить все существующие миграции.

Теперь, когда вы отправляете sh в Heroku с помощью Rails, экземпляр PostgreSQL уровня разработки будет подготовлен и автоматически подключен к вашему приложению. Если вы не используете Rails, вам может потребоваться вручную добавить дополнение PostgreSQL, запустив

heroku addons:create heroku-postgresql
0 голосов
/ 24 января 2020

Heroku изначально не поддерживает SQLite3, и, хотя я вижу, что вы добавили гем pg в производство, вам также потребуется настроить приложение Rails для загрузки своей базы данных из PostgreSQL, отредактировав config/database.yml для подключения до PostgreSQL.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...