将RoR部署到Heroku并且Sqlite3失败

时间:2021-01-28 05:32:13

I've found a number of posts on this same subject (here's one) and thought I made the right changes but I still can't solve the issue.

我在同一个主题(这里是一个)上发现了一些帖子,并认为我做了正确的更改,但我仍然无法解决问题。

After completing the bundle install, I push to heroku, I get the following error when it reaches the sqlite3 install.

完成捆绑安装后,我推送到heroku,当它到达sqlite3安装时出现以下错误。

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:
   --with-opt-dir
   --without-opt-dir
   --with-opt-include
   --without-opt-include=${opt-dir}/include
   --with-opt-lib
   --without-opt-lib=${opt-dir}/lib
   --with-make-prog
   --without-make-prog
   --srcdir=.
   --curdir
   --ruby=/usr/local/bin/ruby
   --with-sqlite3-dir
   --without-sqlite3-dir
   --with-sqlite3-include
   --without-sqlite3-include=${sqlite3-dir}/include
   --with-sqlite3-lib
   --without-sqlite3-lib=${sqlite3-dir}/lib
   --enable-local
   --disable-local
   Gem files will remain installed in /tmp/build_13nbwv3kitbub/vendor/bundle/ruby/1.9.1/gems/sqlite3-1.3.5 for inspection.
   Results logged to /tmp/build_13nbwv3kitbub/vendor/bundle/ruby/1.9.1/gems/sqlite3-1.3.5/ext/sqlite3/gem_make.out
   An error occured 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.
 !
 !     Heroku push rejected, failed to compile Ruby/rails app

To git@heroku.com:morning-dawn-1372.git
 ! [remote rejected] master -> master (pre-receive hook declined)
error: failed to push some refs to 'git@heroku.com:morning-dawn-1372.git'

My Gemfile looks like this:

我的Gemfile看起来像这样:

source 'https://rubygems.org'

gem 'rails', '3.2.2'

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

gem 'json'

group :development, :test do 
  gem 'sqlite3-ruby', :require => 'sqlite3'
  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.3'
  gem 'coffee-rails', '~> 3.2.1'

  # See https://github.com/sstephenson/execjs#readme for more supported runtimes
  # gem 'therubyracer' 

  gem 'uglifier', '>= 1.0.3'
end

gem 'jquery-rails'

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 'ruby-debug'

it looks like I have both

看起来我有两个

Using sqlite3 (1.3.5)
Using sqlite3-ruby (1.3.3)

on my system. Not sure if this is creatign an issue, but explains why I excluded both in the gemfile.

在我的系统上。不确定这是否是一个问题,但解释了为什么我在gemfile中排除了这两个问题。

Environmental info:

$ ruby -v 
ruby 1.8.7 (2012-02-08 patchlevel 358) [i386-cygwin] 

$ rails -v 
Rails 3.2.2 

3 个解决方案

#1


12  

Run the bundle command and then make sure that both the Gemfile and Gemfile.lock are checked into the repo before pushing to Heroku.

运行bundle命令,然后确保在推送到Heroku之前将Gemfile和Gemfile.lock都检入repo。

#2


1  

You will also get this error if sqlite is specified in your Gemfile without a group- for example

如果在没有组的Gemfile中指定sqlite,您也会收到此错误

gem 'rails', '3.2.13'

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

# below is the line that's giving you trouble    
gem "sqlite3", "~> 1.3.7"

Heroku does not allow sqlite in production, so you must either delete this line or change this to something like

Heroku不允许在生产中使用sqlite,因此您必须删除此行或将其更改为类似的内容

...
group :development, :test do
  gem "sqlite3", "~> 1.3.7", :require => "sqlite3"
end

then do bundle install, then git add and git commit your changes to Gemfile and Gemfile.lock.

然后执行bundle install,然后git add和git将更改提交到Gemfile和Gemfile.lock。

After you have done this, your git push heroku master should work.

完成此操作后,你的git push heroku master应该可以正常工作。

#3


1  

Try this:

  • Open the Gemfile.lock and scroll down to sqlite3 (1.3.x) under 'specs:'
  • 打开Gemfile.lock并向下滚动到'specs:'下的sqlite3(1.3.x)

  • Make sure it appears only as sqlite3 (1.3.x) with no extra jazz.
  • 确保它只显示为sqlite3(1.3.x),没有额外的爵士乐。

  • If any extra tags such as "-x86-mingw32" is displayed then delete it.
  • 如果显示任何额外的标签,例如“-x86-mingw32”,则将其删除。

  • Run Bundle Install.
  • 运行捆绑安装。

  • Then try pushing Heroku master.
  • 然后尝试推动Heroku大师。

Worked for me.

为我工作。

Edit

Now that I know better, please don't ever change the Gemfile.lock manually. This was written when I started coding in Rails on Windows. Try updating the particular gem or lock it to a version in your Gemfile.

现在我知道了,请不要手动更改Gemfile.lock。这是我在Windows上开始使用Rails进行编码时编写的。尝试更新特定的gem或将其锁定到Gemfile中的版本。

#1


12  

Run the bundle command and then make sure that both the Gemfile and Gemfile.lock are checked into the repo before pushing to Heroku.

运行bundle命令,然后确保在推送到Heroku之前将Gemfile和Gemfile.lock都检入repo。

#2


1  

You will also get this error if sqlite is specified in your Gemfile without a group- for example

如果在没有组的Gemfile中指定sqlite,您也会收到此错误

gem 'rails', '3.2.13'

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

# below is the line that's giving you trouble    
gem "sqlite3", "~> 1.3.7"

Heroku does not allow sqlite in production, so you must either delete this line or change this to something like

Heroku不允许在生产中使用sqlite,因此您必须删除此行或将其更改为类似的内容

...
group :development, :test do
  gem "sqlite3", "~> 1.3.7", :require => "sqlite3"
end

then do bundle install, then git add and git commit your changes to Gemfile and Gemfile.lock.

然后执行bundle install,然后git add和git将更改提交到Gemfile和Gemfile.lock。

After you have done this, your git push heroku master should work.

完成此操作后,你的git push heroku master应该可以正常工作。

#3


1  

Try this:

  • Open the Gemfile.lock and scroll down to sqlite3 (1.3.x) under 'specs:'
  • 打开Gemfile.lock并向下滚动到'specs:'下的sqlite3(1.3.x)

  • Make sure it appears only as sqlite3 (1.3.x) with no extra jazz.
  • 确保它只显示为sqlite3(1.3.x),没有额外的爵士乐。

  • If any extra tags such as "-x86-mingw32" is displayed then delete it.
  • 如果显示任何额外的标签,例如“-x86-mingw32”,则将其删除。

  • Run Bundle Install.
  • 运行捆绑安装。

  • Then try pushing Heroku master.
  • 然后尝试推动Heroku大师。

Worked for me.

为我工作。

Edit

Now that I know better, please don't ever change the Gemfile.lock manually. This was written when I started coding in Rails on Windows. Try updating the particular gem or lock it to a version in your Gemfile.

现在我知道了,请不要手动更改Gemfile.lock。这是我在Windows上开始使用Rails进行编码时编写的。尝试更新特定的gem或将其锁定到Gemfile中的版本。