【问题标题】:Heroku: Push rejected, failed to compile Ruby appHeroku:推送被拒绝,无法编译 Ruby 应用程序
【发布时间】:2014-02-08 00:41:02
【问题描述】:

我被困了一个星期试图弄清楚这一点。我目前一直在关注在线讲座,但是我完全按照所有内容进行,并且讲师没有任何帮助。每当我尝试推送到 heroku 时,我都会收到以下信息:

初始化存储库,完成。 计数对象:85,完成。 Delta 压缩最多使用 2 个线程。 压缩对象:100% (76/76),完成。 写入对象:100% (85/85),27.36 KiB,完成。 总计 85 个(增量 6),重复使用 0 个(增量 0)

-----> Ruby app detected
-----> Compiling Ruby/Rails
-----> Using Ruby version: ruby-2.0.0
-----> Warning:
       Removing `Gemfile.lock` because it was generated on Windows.
       Bundler will do a full resolve so native gems are handled properly.
       This may result in unexpected gem versions being used in your app.
       In rare occasions Bundler may not be able to resolve your dependencies
 all.
       https://devcenter.heroku.com/articles/bundler-windows-gemfile
-----> Installing dependencies using Bundler version 1.5.2
       New app detected loading default bundler cache
       Running: bundle install --without development:test --path vendor/bundl
-binstubs vendor/bundle/bin -j4
       Your Gemfile lists the gem sqlite3 (>= 0) more than once.
       You should probably keep only one of them.
       While it's not a problem now, it could cause errors if you change the
sion of just one of them later.
       Your Gemfile lists the gem sqlite3 (>= 0) more than once.
       You should probably keep only one of them.
       While it's not a problem now, it could cause errors if you change the
sion of just one of them later.
       Your Gemfile lists the gem rspec-rails (= 2.6.1) more than once.
       You should probably keep only one of them.
       While it's not a problem now, it could cause errors if you change the
sion of just one of them later.
       Fetching gem metadata from https://rubygems.org/.........
       Fetching additional metadata from https://rubygems.org/..
       Resolving dependencies...
       Using builder (3.0.4)
       Using erubis (2.7.0)
       Using journey (1.0.4)
       Using rack (1.4.5)
       Using hike (1.2.3)
       Using tilt (1.4.1)
       Installing i18n (0.6.1)
       Using polyglot (0.3.3)
       Installing mime-types (1.25.1)
       Using tzinfo (0.3.38)
       Using bundler (1.5.2)
       Using coffee-script-source (1.6.3)
       Using execjs (2.0.2)
       Using json (1.8.1)
       Using thor (0.18.1)
       Installing multi_json (1.8.4)
       Installing rake (10.1.1)
       Installing arel (3.0.3)
       Using rack-cache (1.2)
       Using rack-test (0.6.2)
       Using rack-ssl (1.3.3)
       Using treetop (1.4.15)
       Using coffee-script (2.2.0)
       Using rdoc (3.12.2)
       Installing sass (3.2.13)
       Installing uglifier (2.4.0)
       Using sprockets (2.2.2)
       Using mail (2.5.4)
       Gem::Installer::ExtensionBuildError: ERROR: Failed to build gem native
tension.
       /tmp/build_903734dc-f591-44eb-8891-428ba3caf9e0/vendor/ruby-2.0.0/bin/
y 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 pat
the
       location where your sqlite3 shared library is located).
       *** extconf.rb failed ***
       Could not create Makefile due to some reason, probably lack of necessa
       libraries and/or headers.  Check the mkmf.log file for more details.
 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=/tmp/build_903734dc-f591-44eb-8891-428ba3caf9e0/vendor/ruby-2.0
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}/
       --enable-local
       --disable-local
       Gem files will remain installed in /tmp/build_903734dc-f591-44eb-8891-
ba3caf9e0/vendor/bundle/ruby/2.0.0/gems/sqlite3-1.3.8 for inspection.
       Results logged to /tmp/build_903734dc-f591-44eb-8891-428ba3caf9e0/vend
bundle/ruby/2.0.0/gems/sqlite3-1.3.8/ext/sqlite3/gem_make.out
       Installing activesupport (3.2.13)
       Installing pg (0.17.1)
       An error occurred while installing sqlite3 (1.3.8), and Bundler cannot
ntinue.
       Make sure that `gem install sqlite3 -v '1.3.8'` succeeds before bundli

       Bundler Output: Your Gemfile lists the gem sqlite3 (>= 0) more than on

       You should probably keep only one of them.
       While it's not a problem now, it could cause errors if you change the
sion of just one of them later.
       Your Gemfile lists the gem sqlite3 (>= 0) more than once.
       You should probably keep only one of them.
       While it's not a problem now, it could cause errors if you change the
sion of just one of them later.
       Your Gemfile lists the gem rspec-rails (= 2.6.1) more than once.
       You should probably keep only one of them.
       While it's not a problem now, it could cause errors if you change the
sion of just one of them later.
       Fetching gem metadata from https://rubygems.org/.........
       Fetching additional metadata from https://rubygems.org/..
       Resolving dependencies...
       Using builder (3.0.4)
       Using erubis (2.7.0)
       Using journey (1.0.4)
       Using rack (1.4.5)
       Using hike (1.2.3)
       Using tilt (1.4.1)
       Installing i18n (0.6.1)
       Using polyglot (0.3.3)
       Installing mime-types (1.25.1)
       Using tzinfo (0.3.38)
       Using bundler (1.5.2)
       Using coffee-script-source (1.6.3)
       Using execjs (2.0.2)
       Using json (1.8.1)
       Using thor (0.18.1)
       Installing multi_json (1.8.4)
       Installing rake (10.1.1)
       Installing arel (3.0.3)
       Using rack-cache (1.2)
       Using rack-test (0.6.2)
       Using rack-ssl (1.3.3)
       Using treetop (1.4.15)
       Using coffee-script (2.2.0)
       Using rdoc (3.12.2)
       Installing sass (3.2.13)
       Installing uglifier (2.4.0)
       Using sprockets (2.2.2)
       Using mail (2.5.4)

       Gem::Installer::ExtensionBuildError: ERROR: Failed to build gem native
tension.

       /tmp/build_903734dc-f591-44eb-8891-428ba3caf9e0/vendor/ruby-2.0.0/bin/
y 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 pat
the
       location where your sqlite3 shared library is located).
       *** extconf.rb failed ***
       Could not create Makefile due to some reason, probably lack of necessa
       libraries and/or headers.  Check the mkmf.log file for more details.
 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=/tmp/build_903734dc-f591-44eb-8891-428ba3caf9e0/vendor/ruby-2.0
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}/
       --enable-local
       --disable-local


       Gem files will remain installed in /tmp/build_903734dc-f591-44eb-8891-
ba3caf9e0/vendor/bundle/ruby/2.0.0/gems/sqlite3-1.3.8 for inspection.
       Results logged to /tmp/build_903734dc-f591-44eb-8891-428ba3caf9e0/vend
bundle/ruby/2.0.0/gems/sqlite3-1.3.8/ext/sqlite3/gem_make.out
       Installing activesupport (3.2.13)
       Installing pg (0.17.1)
       An error occurred while installing sqlite3 (1.3.8), and Bundler cannot
ntinue.
       Make sure that `gem install sqlite3 -v '1.3.8'` succeeds before bundli

 !
 !     Failed to install gems via Bundler.
 !
 !     Detected sqlite3 gem which is not supported on Heroku.
 !     https://devcenter.heroku.com/articles/sqlite3
 !

 !     Push rejected, failed to compile Ruby app

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

我已经尝试重建 gem 文件,删除 gemfile.lock 并运行捆绑安装程序,遵循以前问题的解决方案,但我仍然收到此错误。

这是我当前的 gemFile:

source 'https://rubygems.org'

gem 'rails', '3.2.13'

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

gem 'sqlite3'


# 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', :platforms => :ruby

  gem 'uglifier', '>= 1.0.3'
end

gem 'jquery-rails'

# 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 'debugger'

group :development do
    gem 'sqlite3'
    gem 'rspec-rails', '2.6.1', :require => 'rspec-rails'
    gem 'faker', '0.3.1'
end

group :test do
    gem 'sqlite3'
    gem 'rspec-rails', '2.6.1', :require => 'rpec-rails'
    gem 'webrat', '0.7.1'
    gem 'factory_girl_rails', '1.0'
    gem 'turn', :require => false
end

group :production do
    gem 'pg'
end

对此有任何帮助吗?

【问题讨论】:

标签: ruby-on-rails ruby heroku sqlite


【解决方案1】:

You can't use SQLite on Heroku,你必须使用 PostgreSQL。

您可以将其设置为在 Heroku 上使用 PostgreSQL,但在开发中使用 SQLite,最好在开发和生产环境中使用相同的数据库。

请注意,您多次列出了gem 'sqlite3',其中包括开发组之外的一个。这会导致 Heroku 尝试安装它。

我的建议是完全删除 sqlite gem 并全部切换到 PostgreSQL。

【讨论】:

    【解决方案2】:

    删除顶部的gem sqlite3 并在您的gemfile 顶部添加ruby '2.0.0'

    也在群下加gem 'rails_12factor'

    【讨论】:

      【解决方案3】:

      我会推荐一些东西:

      1) 按照说明here 处理部署在Windows 上生成的Ruby 项目时出现的Gemfile 问题。

      2) 在您的 Gemfile 中执行以下操作

      group :test, :production do
        gem 'pg'
      end
      
      group :development do
        gem 'sqlite3'
      end
      

      这会从您的生产部署中删除 sqlite3。将它用于单元和集成测试,但将 PostgreSQL 用于验收/功能测试,因为这是 Heroku 上选择的 RDBMS。此外,每个宝石只能引用一次。

      3) 在 Heroku 上的部署环境中设置 Hobby Dev version of the PostgreSQL add-on

      【讨论】:

        猜你喜欢
        • 2023-03-07
        • 1970-01-01
        • 2017-03-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-04-14
        • 1970-01-01
        相关资源
        最近更新 更多