Heroku构建错误:为数据库适配器指定了'sqlite3',但未加载gem

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Heroku构建错误:为数据库适配器指定了'sqlite3',但未加载gem相关的知识,希望对你有一定的参考价值。

我想做什么

我正在构建一个带有rails的应用程序,并将一个非主分支部署到heroku master,测试生产中的应用程序。在我知道Heroku上正在做什么之前我不想弄乱主人,因此我部署了一个功能分支。

如果需要引用,应用程序qazxsw poi的存储库。

在对gemfile进行任何更改后,我运行了:

can be found here

最后一个命令记录为bundle update bundle install git add . git commit git push heroku 0007/heroku:master ,用于将非主分支推送到herokus master。通常这样做是因为你不想搞砸主人。我还问了一会儿.here

我调整了database.yml以适应Heroku要求和postgresql和sqlite3。

The question how to set non-master up for heroku can be found here

我的gemfile也非常直接:

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

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

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

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

问题

在本地测试我的应用程序后,我决定将其推送到Heroku,但是我无法解决依赖性冲突。

疑似错误:

为数据库适配器指定'sqlite3',但未加载gem。将source 'https://rubygems.org' git_source(:github) do |repo_name| repo_name = "#{repo_name}/#{repo_name}" unless repo_name.include?("/") "https://github.com/#{repo_name}.git" end ruby '2.4.1' # Use sqlite3 as the database for Active Record gem 'sqlite3', group: :development # Added development group. gem 'pg', group: :production # Added postgres and made it production only. gem 'rails_12factor' # Specifying an exact Ruby version ruby '2.4.1' # Bundle edge Rails instead: gem 'rails', github: 'rails/rails' gem 'rails', '~> 5.1.4' # Use Puma as the app server gem 'puma', '~> 3.7' # Use SCSS for stylesheets gem 'sass-rails', '~> 5.0' # Use Uglifier as compressor for javascript assets gem 'uglifier', '>= 1.3.0' # See https://github.com/rails/execjs#readme for more supported runtimes # gem 'therubyracer', platforms: :ruby # Use CoffeeScript for .coffee assets and views gem 'coffee-rails', '~> 4.2' # Turbolinks makes navigating your web application faster. Read more: https://github.com/turbolinks/turbolinks gem 'turbolinks', '~> 5' # Build JSON APIs with ease. Read more: https://github.com/rails/jbuilder gem 'jbuilder', '~> 2.5' # Use Redis adapter to run Action Cable in production # gem 'redis', '~> 3.0' # Use ActiveModel has_secure_password # gem 'bcrypt', '~> 3.1.7' # Use Capistrano for deployment # gem 'capistrano-rails', group: :development group :development, :test do # Step-by-step debugging and stack navigation in Pry gem 'pry-byebug', platform: :ruby # Pry is a powerful alternative to the standard IRB shell for Ruby gem 'pry-rails' # Pretty print your Ruby objects with style -- in full color and with proper indentation gem 'awesome_print' # Add a comment summarizing the current schema to the top or bottom of each of your ActiveRecord models, Specs, factory_girl factories... gem 'annotate' # Annotate guard runs the annotate gem when needed gem 'guard-annotate', '~> 2.3' # Use for fighting the N+1 problem in Ruby gem 'bullet' # Speedup RSpec + Cucumber by running parallel on multiple CPU cores gem 'parallel_tests' # Call 'byebug' anywhere in the code to stop execution and get a debugger console gem 'byebug', platforms: [:mri, :mingw, :x64_mingw] # Adds support for Capybara system testing and selenium driver gem 'capybara', '~> 2.13' gem 'selenium-webdriver' end group :development do # Access an IRB console on exception pages or by using <%= console %> anywhere in the code. gem 'web-console', '>= 3.3.0' gem 'listen', '>= 3.0.5', '< 3.2' # Spring speeds up development by keeping your application running in the background. Read more: https://github.com/rails/spring gem 'spring' gem 'spring-watcher-listen', '~> 2.0.0' # bundler-audit provides patch-level verification for Bundled apps gem 'bundler-audit', '~> 0.6.0', require: false # Bundler guard allows to automatically & intelligently install/update bundle when needed. gem 'guard-bundler', '~> 2.1', require: false # compare licenses against a user-defined whitelist, and give you an actionable exception report gem 'license_finder', '~> 3.0', '>= 3.0.1', require: false # Brakeman is an open source static analysis tool which checks Rails applications for security vulnerabilities. gem 'brakeman', require: false # Better Errors replaces the standard Rails error page with a much better and more useful error page gem 'better_errors' # necessary to use Better Errors' advanced features gem 'binding_of_caller', platforms: :ruby # RuboCop configuration which has the same code style checking as official Ruby on Rails gem 'rubocop', '~> 0.51.0', require: false gem 'guard-rubocop', require: false # i18n-tasks helps you find and manage missing and unused translations gem 'i18n-tasks', require: false # IYE makes it easy to translate your Rails I18N files and keeps them up to date gem 'iye', require: false # Image Uploader Carrierwave for all kinds of Picture related jobs gem 'carrierwave', '~> 1.0' end group :test do # Guard is a command line tool to easily handle events on file system modifications gem 'guard' gem 'guard-minitest' # This gem brings back assigns to your controller tests as well as assert_template gem 'rails-controller-testing' # To get the default Rails tests to show red and green at the appropriate times gem 'minitest-reporters' # Strategies for cleaning databases in Ruby. Can be used to ensure a clean state for testing. gem 'database_cleaner' # Code coverage for Ruby gem 'simplecov', require: false # Collection of testing matchers extracted from Shoulda gem 'shoulda-matchers' end # Windows does not include zoneinfo files, so bundle the tzinfo-data gem gem 'tzinfo-data', platforms: [:mingw, :mswin, :x64_mingw, :jruby] 添加到您的Gemfile

我知道很多帖子都记录了这个问题。我梳理过他们,找到我错过的东西,但无济于事。

这些是我在这个问题上找到的帖子:

他们基本上都说,看看你将postgresql设置为production并将sqlite3设置为开发数据库,​​或者使用postgres设置你的项目。

据我所知,我已经涵盖了这一点。

我将我的gemfile设置为使用source 3作为生产数据库,并将pg用作开发数据库,​​如sqlite3here所述。

我的gemfile似乎没有sqlite的任何生产代码。

here

当试图运行 [57] → gem dependency -R sqlite Gem sqlite3-1.3.13 hoe (~> 3.15, development) hoe-bundler (~> 1.0, development) mini_portile (~> 0.6.2, development) minitest (~> 5.9, development) rake-compiler (~> 0.9.3, development) rake-compiler-dock (~> 0.5.2, development) rdoc (~> 4.0, development) Used by awesome_print-1.8.0 (sqlite3 (>= 0, development)) database_cleaner-1.7.0 (sqlite3 (>= 0, development)) rails-controller-testing-1.0.2 (sqlite3 (>= 0, development)) sass-rails-5.0.7 (sqlite3 (>= 0, development)) 时,问题开始显现。

这是来自heroku的产生的踪迹:

$ heroku run rake db:migrate
答案

SQLite不能与Heroku一起使用,因为它基于磁盘而Heroku使用短暂的文件系统。

SQLite在内存中运行,并将其数据存储备份在磁盘上的文件中。虽然这种策略适用于开发,但Heroku的Cedar堆栈有一个短暂的文件系统。您可以写入它,并且可以从中读取,但内容将定期清除。如果您在Heroku上使用SQLite,则至少每24小时丢失一次整个数据库。

即使Heroku的磁盘持续运行SQLite仍然不太适合。由于SQLite不作为服务运行,因此每个dyno将运行单独的运行副本。每个副本都需要自己的磁盘备份存储。这意味着每个为您的应用程序供电的dyno都会有一组不同的数据,因为磁盘未同步。

- [159] → heroku logs --tail 2018-09-03T03:00:29.276401+00:00 app[web.1]: from /app/vendor/bundle/ruby/2.4.0/gems/railties-5.1.6/lib/rails/commands/server/server_command.rb:130:in `tap' 2018-09-03T03:00:29.276425+00:00 app[web.1]: from /app/vendor/bundle/ruby/2.4.0/gems/railties-5.1.6/lib/rails/commands/server/server_command.rb:130:in `perform' 2018-09-03T03:00:29.276472+00:00 app[web.1]: from /app/vendor/bundle/ruby/2.4.0/gems/thor-0.20.0/lib/thor/invocation.rb:126:in `invoke_command' 2018-09-03T03:00:29.276495+00:00 app[web.1]: from /app/vendor/bundle/ruby/2.4.0/gems/thor-0.20.0/lib/thor.rb:387:in `dispatch' 2018-09-03T03:00:29.276518+00:00 app[web.1]: from /app/vendor/bundle/ruby/2.4.0/gems/railties-5.1.6/lib/rails/command/base.rb:63:in `perform' 2018-09-03T03:00:29.276542+00:00 app[web.1]: from /app/vendor/bundle/ruby/2.4.0/gems/railties-5.1.6/lib/rails/command.rb:44:in `invoke' 2018-09-03T03:00:29.276567+00:00 app[web.1]: from /app/vendor/bundle/ruby/2.4.0/gems/railties-5.1.6/lib/rails/commands.rb:16:in `<top (required)>' 2018-09-03T03:00:29.276591+00:00 app[web.1]: from bin/rails:9:in `require' 2018-09-03T03:00:29.276615+00:00 app[web.1]: from bin/rails:9:in `<main>' 2018-09-03T08:35:36.524552+00:00 heroku[web.1]: State changed from crashed to starting 2018-09-03T08:35:39.232773+00:00 heroku[web.1]: Starting process with command `bin/rails server -p 52942 -e production` 2018-09-03T08:35:42.729326+00:00 heroku[web.1]: State changed from starting to crashed 2018-09-03T08:35:42.656882+00:00 app[web.1]: => Booting Puma 2018-09-03T08:35:42.656898+00:00 app[web.1]: => Rails 5.1.6 application starting in production 2018-09-03T08:35:42.656899+00:00 app[web.1]: => Run `rails server -h` for more startup options 2018-09-03T08:35:42.656900+00:00 app[web.1]: Exiting 2018-09-03T08:35:42.656943+00:00 app[web.1]: /app/vendor/bundle/ruby/2.4.0/gems/activerecord-5.1.6/lib/active_record/connection_adapters/connection_specification.rb:188:in `rescue in spec': Specified 'sqlite3' for database adapter, but the gem is not loaded. Add `gem 'sqlite3'` to your Gemfile (and ensure its version is at the minimum required by ActiveRecord). (Gem::LoadError) 2018-09-03T08:35:42.656967+00:00 app[web.1]: from /app/vendor/bundle/ruby/2.4.0/gems/activerecord-5.1.6/lib/active_record/connection_adapters/connection_specification.rb:185:in `spec' 2018-09-03T08:35:42.656977+00:00 app[web.1]: from /app/vendor/bundle/ruby/2.4.0/gems/activerecord-5.1.6/lib/active_record/connection_adapters/abstract/connection_pool.rb:880:in `establish_connection' 2018-09-03T08:35:42.656980+00:00 app[web.1]: from /app/vendor/bundle/ruby/2.4.0/gems/activerecord-5.1.6/lib/active_record/connection_handling.rb:58:in `establish_connection' 2018-09-03T08:35:42.656982+00:00 app[web.1]: from /app/vendor/bundle/ruby/2.4.0/gems/activerecord-5.1.6/lib/active_record/railtie.rb:124:in `block (2 levels) in <class:Railtie>' 2018-09-03T08:35:42.656983+00:00 app[web.1]: from /app/vendor/bundle/ruby/2.4.0/gems/activesupport-5.1.6/lib/active_support/lazy_load_hooks.rb:69:in `instance_eval' 2018-09-03T08:35:42.657020+00:00 app[web.1]: from /app/vendor/bundle/ruby/2.4.0/gems/activesupport-5.1.6/lib/active_support/lazy_load_hooks.rb:69:in `block in execute_hook' 2018-09-03T08:35:42.657023+00:00 app[web.1]: from /app/vendor/bundle/ruby/2.4.0/gems/activesupport-5.1.6/lib/active_support/lazy_load_hooks.rb:60:in `with_execution_control' 2018-09-03T08:35:42.657024+00:00 app[web.1]: from /app/vendor/bundle/ruby/2.4.0/gems/activesupport-5.1.6/lib/active_support/lazy_load_hooks.rb:65:in `execute_hook' 2018-09-03T08:35:42.657027+00:00 app[web.1]: from /app/vendor/bundle/ruby/2.4.0/gems/activesupport-5.1.6/lib/active_support/lazy_load_hooks.rb:50:in `block in run_load_hooks' 2018-09-03T08:35:42.657038+00:00 app[web.1]: from /app/vendor/bundle/ruby/2.4.0/gems/activesupport-5.1.6/lib/active_support/lazy_load_hooks.rb:49:in `each' 2018-09-03T08:35:42.657065+00:00 app[web.1]: from /app/vendor/bundle/ruby/2.4.0/gems/activesupport-5.1.6/lib/active_support/lazy_load_hooks.rb:49:in `run_load_hooks' 2018-09-03T08:35:42.657068+00:00 app[web.1]: from /app/vendor/bundle/ruby/2.4.0/gems/activerecord-5.1.6/lib/active_record/base.rb:326:in `<module:ActiveRecord>' 2018-09-03T08:35:42.657070+00:00 app[web.1]: from /app/vendor/bundle/ruby/2.4.0/gems/activerecord-5.1.6/lib/active_record/base.rb:25:in `<top (required)>' 2018-09-03T08:35:42.657073+00:00 app[web.1]: from /app/vendor/bundle/ruby/2.4.0/gems/activesupport-5.1.6/lib/active_support/dependencies.rb:292:in `require' 2018-09-03T08:35:42.657083+00:00 app[web.1]: from /app/vendor/bundle/ruby/2.4.0/gems/activesupport-5.1.6/lib/active_support/dependencies.rb:292:in `block in require' 2018-09-03T08:35:42.657086+00:00 app[web.1]: from /app/vendor/bundle/ruby/2.4.0/gems/activesupport-5.1.6/lib/active_support/dependencies.rb:258:in `load_dependency' 2018-09-03T08:35:42.657110+00:00 app[web.1]: from /app/vendor/bundle/ruby/2.4.0/gems/activesupport-5.1.6/lib/active_support/dependencies.rb:292:in `require' 2018-09-03T08:35:42.657113+00:00 app[web.1]: from /app/app/models/application_record.rb:1:in `<top (required)>' 2018-09-03T08:35:42.657123+00:00 app[web.1]: from /app/vendor/bundle/ruby/2.4.0/gems/activesupport-5.1.6/lib/active_support/dependencies.rb:292:in `require' 2018-09-03T08:35:42.657128+00:00 app[web.1]: from /app/vendor/bundle/ruby/2.4.0/gems/activesupport-5.1.6/lib/active_support/dependencies.rb:292:in `block in require' 2018-09-03T08:35:42.657152+00:00 app[web.1]: from /app/vendor/bundle/ruby/2.4.0/gems/activesupport-5.1.6/lib/active_support/dependencies.rb:258:in `load_dependency' 2018-09-03T08:35:42.657153+00:00 app[web.1]: from /app/vendor/bundle/ruby/2.4.0/gems/activesupport-5.1.6/lib/active_support/dependencies.rb:292:in `require' 2018-09-03T08:35:42.657154+00:00 app[web.1]: from /app/vendor/bundle/ruby/2.4.0/gems/activesupport-5.1.6/lib/active_support/dependencies.rb:379:in `block in require_or_load' 2018-09-03T08:35:42.657178+00:00 app[web.1]: from /app/vendor/bundle/ruby/2.4.0/gems/activesupport-5.1.6/lib/active_support/dependencies.rb:36:in `block in load_interlock' 2018-09-03T08:35:42.657181+00:00 app[web.1]: from /app/vendor/bundle/ruby/2.4.0/gems/activesupport-5.1.6/lib/active_support/dependencies/interlock.rb:12:in `block in loading' 2018-09-03T08:35:42.657184+00:00 app[web.1]: from /app/vendor/bundle/ruby/2.4.0/gems/activesupport-5.1.6/lib/active_support/concurrency/share_lock.rb:149:in `exclusive' 2018-09-03T08:35:42.657186+00:00 app[web.1]: from /app/vendor/bundle/ruby/2.4.0/gems/activesupport-5.1.6/lib/active_support/dependencies/interlock.rb:11:in `loading' 2018-09-03T08:35:42.657212+00:00 app[web.1]: from /app/vendor/bundle/ruby/2.4.0/gems/activesupport-5.1.6/lib/active_support/dependencies.rb:36:in `load_interlock' 2018-09-03T08:35:42.657213+00:00 app[web.1]: from /app/vendor/bundle/ruby/2.4.0/gems/activesupport-5.1.6/lib/active_support/dependencies.rb:357:in `require_or_load' 2018-09-03T08:35:42.657216+00:00 app[web.1]: from /app/vendor/bundle/ruby/2.4.0/gems/activesupport-5.1.6/lib/active_support/dependencies.rb:335:in `depend_on' 2018-09-03T08:35:42.657220+00:00 app[web.1]: from /app/vendor/bundle/ruby/2.4.0/gems/activesupport-5.1.6/lib/active_support/dependencies.rb:251:in `require_dependency' 2018-09-03T08:35:42.657224+00:00 app[web.1]: from /app/vendor/bundle/ruby/2.4.0/gems/railties-5.1.6/lib/rails/engine.rb:476:in `block (2 levels) in eager_load!' 2018-09-03T08:35:42.657226+00:00 app[web.1]: from /app/vendor/bundle/ruby/2.4.0/gems/railties-5.1.6/lib/rails/engine.rb:475:in `ea

以上是关于Heroku构建错误:为数据库适配器指定了'sqlite3',但未加载gem的主要内容,如果未能解决你的问题,请参考以下文章

Gem::LoadError: 为数据库适配器指定了“sqlite3”,但未加载 gem

Heroku 网站:npm 错误!缺少脚本:开始

Heroku 构建依赖项安装失败

Heroku 似乎在构建客户端,但我没有看到 dist 文件夹

为啥heroku无法在项目上编译构建?

部署Django+React到Heroku - 未捕获的语法错误。意外的标记'<'