当我部署到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
答案 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"
之后推送代码