ruby-on-rails - 加载 'sqlite3' Active Record 适配器时出错。当我在 Heroku 中部署时

标签 ruby-on-rails ruby heroku rubygems

我在 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

最佳答案

您应该从您的应用程序中删除 SQLite,并在开发、测试和生产中使用 Postgres。 RDBMS 之间存在许多小的不兼容性,您不想在将应用程序投入生产时发现它们。

1。在本地系统上安装 Postgres。

如何执行此操作取决于您的系统。 OS-X 和 Windows 有简单的安装程序。在 Linux 上,您可以通过包管理器安装它。

2。删除 sqlite gem。

# 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。提交并推送

关于ruby-on-rails - 加载 'sqlite3' Active Record 适配器时出错。当我在 Heroku 中部署时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59901798/

相关文章:

mysql - Rails 5 数据库迁移错误

ruby-on-rails - 如何部署我的应用程序可以访问但其他人无法获取的 'private' gem?

ruby-on-rails - 在Rails应用中进行长轮询

ruby-on-rails - Rails 控制台 UTF-8 格式的字节序列无效(ArgumentError)

javascript - 由于 CSS 和 JS 文件,Rails 页面加载缓慢。 304 未修改错误

ruby-on-rails - 在 ruby​​ on rails 中,如何将 ActiveSupport::TimeWithZone 中的时间转换为月、日、年?

ruby - ruby 类变量中访问器方法的简写

javascript - Heroku buildpack horse 忽略 package.json 中的 Node 版本

heroku - 如何为指向 Heroku 应用程序的顶级域(无 www)设置 DNS?

mysql - 数据库驱动应用程序中的 Has_Many、Belongs_To 关系