部署到Heroku时资产管道失败

时间:2013-09-04 23:32:52

标签: ruby-on-rails heroku rubygems bundler asset-pipeline

当我部署到Heroku时,我收到以下错误消息:

Connecting to database specified by DATABASE_URL
   rake aborted!
   could not connect to server: Connection refused
   Is the server running on host "127.0.0.1" and accepting
   TCP/IP connections on port 5432?

奇怪的是,这只是在我将gem 'impressionist'添加到Gemfile之后才开始发生的。在当地没有任何问题。注释掉gem会将其解析为部署。

从Heroku收到的错误是well documented,但没有任何内容可以为我提供导致失败的原因。

The Impressionist gem相当受欢迎,我没有看到任何类似的问题,所以我怀疑宝石是问题的根源。

更新

这是完整的Gemfile,只是为了表明它是一个在部署中工作正常的普通应用程序(直到添加了上面提到的gem)。

source 'https://rubygems.org'

gem 'rails', '3.2.13'
gem 'bcrypt-ruby', '3.0.1'
gem 'jquery-rails', '2.2.1'
gem 'impressionist'
# gem 'will_paginate'

group :assets do
  gem 'sass-rails',   '~> 3.2.6'
  gem 'uglifier', '>= 1.3.0'
  gem 'jquery-ui-rails'
end

group :development, :test do
  gem 'quiet_assets'
  gem 'webrick', '~> 1.3.1'
  gem 'sqlite3', '1.3.7'
  gem 'hirb'
end

group :production do
  gem 'thin'
  gem 'pg', '0.12.2'
end

3 个答案:

答案 0 :(得分:4)

'问题'是Impressionist动态设置数据库配置,因此它需要加载数据库适配器。我们以ActiveRecord为例。当它尝试加载ActiveRecord :: Base时,会引发一个异常,即Heroku会通过该消息通知您,因为您尚未连接到该数据库。 Devise有这个问题plataformatec / devise#1339

我添加了cancan gem并删除了印象派,它引发了同样的错误。

幸运的是有一个解决方案:

# config/application.rb
# Forces application to not load models or access the DB when precompiling
# assets
config.assets.initialize_on_precompile = false

谢谢:)

答案 1 :(得分:1)

我建议在该gem的GitHub项目中提交一个问题。最有可能的是它尝试使用初始化过程连接到数据库,并且因为该阶段的数据库不可用,所以它失败了。

您可以通过将此行添加到config/environments/production.rb文件来解决此问题:

 config.assets.initialize_on_precompile = false

答案 2 :(得分:0)

在production.rb文件中更改此内容

config.assets.compile = false

然后在本地预编译资产

RAILS_ENV=production bundle exec rake assets:precompile

将创建公共/资产目录。在这个目录中你会找到一个manifest.yml,其中包含Rails 3中已编译资产的md5sums。在Rails 4中,该文件将是manifest-.json。将公共/资产添加到您的git存储库将使其可用于Heroku。

git add public/assets
git commit -m "vendor compiled assets"

之后推送代码