2

我的目标是在 Heroku 上为环境“heroku_production”部署一个应用程序。

我的 Gemfile 看起来像这样:

source 'https://rubygems.org'

gem 'rails', '3.2.9'

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

group :development, :test, :production do 
  gem 'sqlite3'
end
# This is needed in case this app is deployed in Heroku - in order to make the Heroku deployment independent from the production environment
group :heroku_production do
  gem 'pg'
end
...

我将 BUNDLE_WITHOUT 变量设置为“开发:测试:生产”。这是调用时的输出heroku config --app my_app

=== my_app Config Vars
BUNDLE_WITHOUT:             development:test:production
DATABASE_URL:               postgres://XXXXXXX....
HEROKU_POSTGRESQL_CYAN_URL: postgres://XXXXXXX....
RACK_ENV:                   heroku_production
RAILS_ENV:                  heroku_production

但是当我将我的东西推送到 Heroku 时,BUNDLE_WITHOUT 变量没有被应用,正如您在以下错误消息中看到的那样(第 3 行:--without development:test):

-----> Ruby/Rails app detected
-----> Installing dependencies using Bundler version 1.3.2
       Running: bundle install --without development:test --path vendor/bundle --binstubs vendor/bundle/bin --deployment
       Fetching gem metadata from https://rubygems.org/.........
       Fetching gem metadata from https://rubygems.org/..
       Using rake (10.0.4)
       ...
       Using pg (0.14.1)
       Installing sqlite3 (1.3.7)
       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 ***

       An error occurred while installing sqlite3 (1.3.7), and Bundler cannot continue.
       Make sure that `gem install sqlite3 -v '1.3.7'` succeeds before bundling.
 !
 !     Failed to install gems via Bundler.
 !
 !     Heroku push rejected, failed to compile Ruby/rails app

To git@heroku.com:my_app.git
 ! [remote rejected] 3dac67374c268d3bf9e051a6db39efc56ae81c76 -> master (pre-receive hook declined)

Heroku 为什么要这样做?
谷歌搜索也没有帮助。

4

2 回答 2

3

请注意 - 目前,Cedar 堆栈不支持 BUNDLE_WITHOUT。

来自:https ://devcenter.heroku.com/articles/bundler#specifying-gems-and-groups

于 2013-04-26T15:27:54.467 回答
2

我最近就这个问题联系了 Heroku,他们说 BUNDLE_WITHOUT 现在可以工作了!

这是我得到的回复:

嗨, user_env_compile 已被弃用,但它的功能刚刚成为 Ruby buildpack 的默认功能 - 因此您可以使用 BUNDLE_WITHOUT 配置变量。我相信您看到了这篇文章,但这是正确的吗?https://devcenter.heroku.com/articles/bundler#specifying-gems-and-groups 似乎我们需要更新该文档!最好的,[名称已编辑]

还没有尝试过,但很快就会。

于 2014-04-18T04:38:28.287 回答