Rails - 错误“安装sqlite3(1.3.13)时发生错误,并且Bundler无法继续”

问题描述:

我完全不熟悉Git和Ruby on Rails,并且正在执行“The Odin Project”,但我已经被困住了。Rails - 错误“安装sqlite3(1.3.13)时发生错误,并且Bundler无法继续”

我想部署我创建的应用程序,使用Git将主分支推送到Heroku。

当我运行命令“git push heroku master”时,我得到这个日志带有下面的错误,它可能是什么?

[email protected]:~/railsbridge/hello_app$ git push heroku master 
Counting objects: 90, done. 
Delta compression using up to 2 threads. 
Compressing objects: 100% (76/76), done. 
Writing objects: 100% (90/90), 22.03 KiB | 0 bytes/s, done. 
Total 90 (delta 6), reused 0 (delta 0) 
remote: Compressing source files... done. 
remote: Building source: 
remote: 
remote: !  Warning: Multiple default buildpacks reported the ability to handle this app. The first buildpack in the list below will be used. 
remote:    Detected buildpacks: Ruby,Node.js 
remote:    See https://devcenter.heroku.com/articles/buildpacks#buildpack-detect-order 
remote: -----> Ruby app detected 
remote: -----> Compiling Ruby/Rails 
remote: -----> Using Ruby version: ruby-2.3.4 
remote: -----> Installing dependencies using bundler 1.15.2 
remote:  Running: bundle install --without development:test --path vendor/bundle --binstubs vendor/bundle/bin -j4 --deployment 
remote:  Warning: the running version of Bundler (1.15.2) is older than the version that created the lockfile (1.15.4). We suggest you upgrade to the latest version of Bundler by running `gem install bundler`. 
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:  Fetching rake 12.1.0 
remote:  Installing concurrent-ruby 1.0.5 
remote:  Fetching minitest 5.10.3 
.... 
remote:  Installing turbolinks 5.0.1 
remote:  Fetching activesupport 5.1.4 
remote:  The latest bundler is 1.16.0.pre.3, but you are currently running 1.15.2. 
remote:  To update, run `gem install bundler --pre` 
remote:  Gem::Ext::BuildError: ERROR: Failed to build gem native extension. 
remote:  current directory: 
remote:  /tmp/build_c400101f4282a4c7d4222ce20d2d35b2/vendor/bundle/ruby/2.3.0/gems/sqlite3-1.3.13/ext/sqlite3 
remote:  /tmp/build_c400101f4282a4c7d4222ce20d2d35b2/vendor/ruby-2.3.4/bin/ruby -r 
remote:  ./siteconf20171015-278-1swne7x.rb extconf.rb 
remote:  checking for sqlite3.h... no 
remote:  sqlite3.h is missing. Try 'brew install sqlite3', 
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:  --srcdir=. 
remote:  --curdir 
remote:  --ruby=/tmp/build_c400101f4282a4c7d4222ce20d2d35b2/vendor/ruby-2.3.4/bin/$(RUBY_BASE_NAME) 
remote:  --with-sqlite3-config 
remote:  --without-sqlite3-config 
remote:  --without-sqlite3-lib=${sqlite3-dir}/lib 
remote:  To see why this extension failed to compile, please check the mkmf.log which can 
remote:  be found here: 
remote:  /tmp/build_c400101f4282a4c7d4222ce20d2d35b2/vendor/bundle/ruby/2.3.0/extensions/x86_64-linux/2.3.0/sqlite3-1.3.13/mkmf.log 
remote:  extconf failed, exit code 1 
remote:  Gem files will remain installed in 
remote:  /tmp/build_c400101f4282a4c7d4222ce20d2d35b2/vendor/bundle/ruby/2.3.0/gems/sqlite3-1.3.13 
remote:  for inspection. 
remote:  Results logged to 
remote:  /tmp/build_c400101f4282a4c7d4222ce20d2d35b2/vendor/bundle/ruby/2.3.0/extensions/x86_64-linux/2.3.0/sqlite3-1.3.13/gem_make.out 
remote:  An error occurred while installing sqlite3 (1.3.13), and Bundler cannot 
remote:  continue. 
remote:  Make sure that `gem install sqlite3 -v '1.3.13'` succeeds before bundling. 
remote:  In Gemfile: 
remote:  sqlite3 
remote:  Bundler Output: Warning: the running version of Bundler (1.15.2) is older than the version that created the lockfile (1.15.4). We suggest you upgrade to the latest version of Bundler by running `gem install bundler`. 
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:  Fetching rake 12.1.0 
remote:  Fetching concurrent-ruby 1.0.5 
1.4 
remote:  Fetching rb-inotify 0.9.10 
remote:  Installing rb-inotify 0.9.10 
remote:  The latest bundler is 1.16.0.pre.3, but you are currently running 1.15.2. 
remote:  To update, run `gem install bundler --pre` 
remote:  Gem::Ext::BuildError: ERROR: Failed to build gem native extension. 
remote:   
remote:  current directory: 
remote:  /tmp/build_c400101f4282a4c7d4222ce20d2d35b2/vendor/bundle/ruby/2.3.0/gems/sqlite3-1.3.13/ext/sqlite3 
remote:  /tmp/build_c400101f4282a4c7d4222ce20d2d35b2/vendor/ruby-2.3.4/bin/ruby -r 
remote:  ./siteconf20171015-278-1swne7x.rb extconf.rb 
remote:  checking for sqlite3.h... no 
remote:  sqlite3.h is missing. Try 'brew install sqlite3', 
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:  --ruby=/tmp/build_c400101f4282a4c7d4222ce20d2d35b2/vendor/ruby-2.3.4/bin/$(RUBY_BASE_NAME) 
remote:  --with-sqlite3-config 
remote:  --without-sqlite3-lib=${sqlite3-dir}/lib 
remote:   
remote:  To see why this extension failed to compile, please check the mkmf.log which can 
remote:  be found here: 
remote:   
remote:  /tmp/build_c400101f4282a4c7d4222ce20d2d35b2/vendor/bundle/ruby/2.3.0/extensions/x86_64-linux/2.3.0/sqlite3-1.3.13/mkmf.log 
remote:   
remote:  extconf failed, exit code 1 
remote:   
remote:  Gem files will remain installed in 
remote:  /tmp/build_c400101f4282a4c7d4222ce20d2d35b2/vendor/bundle/ruby/2.3.0/gems/sqlite3-1.3.13 
remote:  for inspection. 
remote:  Results logged to 
remote:  /tmp/build_c400101f4282a4c7d4222ce20d2d35b2/vendor/bundle/ruby/2.3.0/extensions/x86_64-linux/2.3.0/sqlite3-1.3.13/gem_make.out 
remote:   
remote:  An error occurred while installing sqlite3 (1.3.13), and Bundler cannot 
remote:  continue. 
remote:  Make sure that `gem install sqlite3 -v '1.3.13'` succeeds before bundling. 
remote:   
remote:  In Gemfile: 
remote:  sqlite3 
remote: ! 
remote: !  Failed to install gems via Bundler. 
remote: !  Detected sqlite3 gem which is not supported on Heroku: 
remote: !  https://devcenter.heroku.com/articles/sqlite3 
remote: ! 
remote: !  Push rejected, failed to compile Ruby app. 
remote: 
remote: !  Push failed 
remote: Verifying deploy... 
remote: 
remote: ! Push rejected to murmuring-river-60914. 
remote: 
To https://git.heroku.com/murmuring-river-60914.git 
! [remote rejected] master -> master (pre-receive hook declined) 
error: failed to push some refs to 'https://git.heroku.com/murmuring-river-60914.git' 

我已经用这里面设置的Gemfile跟着教程指令:

group :development, :test do 
    gem 'sqlite3', '1.3.13' 
    gem 'byebug', '9.0.0', platform: :mri 
end 

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

对于多buildpacks,将它们全部删除,然后设置红宝石之一:

$ heroku buildpacks:clear 
$ heroku buildpacks:set heroku/ruby 

关于SQLite on Heroku

SQLite在内存中运行,并将其数据存储备份到磁盘上的文件中。 虽然此策略对开发很有效,但Heroku的Cedar栈 有一个临时文件系统。您可以写信给它,并且您可以从中读取 ,但内容将被定期清除。如果您在上使用Heroku上的SQLite,则每24小时会丢失至少 的整个数据库。

因此,对于消息

sqlite3.h丢失。尝试“酿造安装sqlite3'`

更换sqlite3宝石为pg在你的Gemfile,然后编辑database.yml文件:

# Gemfile 
gem 'pg' 

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

development: 
    <<: *default 
    database: your_project_name_dev 

test: 
    <<: *default 
    database: your_project_name_test 

production: 
    <<: *default 
    database: your_project_name_prod 

可能是你需要清洁TMP /文件夹,这样你就可以删除Gemfile.lock的文件并运行轨道为命令:

$ rm -rf Gemfile.lock 
$ rails tmp:clear 
$ rails tmp:create 
+0

我做了这些改变,但它似乎得到同样的错误......我可以离开“your_project_name”在database.yml中或者我应该放些东西cific在它的地方? – naufragio

+1

我建议您删除Gemfile.lock文件并再次运行软件包安装。 'your_project_name'是接受数据库的名称,可以是任何只调整名称规范的名称。 –

+0

当我运行$ heroku buildpacks时:删除我获得的heroku/nodejs:▸heroku-cli:可从6.13.18更新到6.14.34-1fcf80e ▸未找到任何buildpack包。在murmuring-river-60914上的下一个版本将会 ▸正常检测buildpack。可以与此有关吗? – naufragio