【问题标题】:Heroku: push rejected - failed to install gems via bundlerHeroku:推送被拒绝 - 无法通过捆绑程序安装 gem
【发布时间】:2012-06-07 16:13:18
【问题描述】:

我尝试以与以往相同的方式将应用推送到 Heroku。我正在使用 Ruby 1.9.2 和 Rails 3.2.1。但是,现在我收到此错误消息。我按照它的建议做了

make sure that `gem install sqlite3 -v '1.3.5'` succeeds before bundling.

注意,即使我在我的 gemfile 中这样做了,它也会这样做

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

但在终端中执行gem install sqlite3 -v '1.3.5',但推送仍然被拒绝。我不确定如何检查它在 tmp 目录中引用的 Gem 文件,但即使我这样做了,我也不会理解它们

有什么建议吗?

Gem files will remain installed in /tmp/build_1timyd7o5k59l/vendor/bundle/ruby/1.9.1/gems/sqlite3-1.3.5 for inspection.
       Results logged to /tmp/build_1timyd7o5k59l/vendor/bundle/ruby/1.9.1/gems/sqlite3-1.3.5/ext/sqlite3/gem_make.out
       An error occurred 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

【问题讨论】:

    标签: ruby-on-rails heroku


    【解决方案1】:

    据我所知 Heroku 不支持 sqlite3,而是使用 PostgreSQL 数据库。你需要修改你的 Gemfile 和你的 database.yml。因此,对于您的生产组,在您的 Gemfile 中,您需要:

    https://devcenter.heroku.com/articles/rails3

    编辑:

    这里似乎有更详细的答案,所以这可能是重复的:Pushing Rails with SQLite3 to Heroku fails

    【讨论】:

    • 我已经使用 sqlite3 和 heroku 很长时间了。 Heroku 只是将 sqlite3 映射到 postgres
    • 你有机会发布你的整个 Gemfile 吗?
    【解决方案2】:

    我总是只注释掉 SQLite3 gem,它对我很有效,所以当我推送到 heroku 时,我的 gemfile 看起来像这样:

    # Development Database
    #gem 'sqlite3'
    # Production Database
    gem 'pg'
    

    编辑:

    上述解决方案有效,如果您出于任何原因不想更新 gem,这很容易。解决此问题的更好的长期解决方案是执行以下操作:

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

    然后删除您的gemfile.lock 文件。 您需要生成一个新的gemfile.lock 文件来反映您的更改。在终端运行:

    bundle update
    

    最后,通过在终端中执行以下操作来更新您的存储库并推送到 heroku:

    git add .
    git commit -m "commit message"
    git push heroku 
    

    【讨论】:

    • 伟大而简单的答案!谢谢!
    • 您应该在生产和开发中使用相同的 SQL 引擎,因为可能存在一些技术差异,从而在生产中引入您无法在开发中看到或重现的错误。
    • 确实如此,但问题是如何做到以上。以上对于简单的站点,或者想在本地使用 SQLite 的初学者来说都很好。
    【解决方案3】:

    实际上,如果您想在本地使用 sqlite3,那么您的初始 Gemfile 代码是正确的。就像你展示的那样,你把它放在 gem 文件中:

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

    那么你必须删除你本地的 Gemfile.lock,然后运行:

    bundle update
    

    重新构建 .lock 文件。然后添加并重新提交 Gemfile:

    git add Gemfile
    git commit -m "Gemfile commit message"
    

    然后将新的 Gemfile 推送到 repo:

    git push master
    

    当然,相应地更改 GIT 详细信息,但你明白了。这都是关于添加/提交/推送 Gemfile。

    【讨论】:

      【解决方案4】:

      您必须将更新的 Gemfile.lock 添加到 git 并尝试 git push heroku master... 它对我有用,而且肯定对你也有用

      别忘了添加 config.action_controller.perform_caching = true

      【讨论】:

        猜你喜欢
        • 2011-06-02
        • 1970-01-01
        • 2016-05-07
        • 2018-07-16
        • 1970-01-01
        • 2012-10-10
        • 2019-04-02
        相关资源
        最近更新 更多