1

当我部署到 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 收到的错误有据可查,但没有任何线索可以让我了解导致失败的原因。

印象派 gem相当受欢迎,我还没有看到任何类似的问题源于它,所以我怀疑 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
4

3 回答 3

4

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

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

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

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

谢谢 :)

于 2013-09-08T00:06:07.130 回答
1

我建议在那个 gem 的 GitHub 项目上提交一个问题。很可能它正在尝试使用初始化过程连接到数据库,并且由于该阶段数据库不可用,因此它失败了。

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

 config.assets.initialize_on_precompile = false
于 2013-09-05T00:14:49.403 回答
0

在您的 production.rb 文件中更改它

config.assets.compile = false

然后在本地预编译资产

RAILS_ENV=production bundle exec rake assets:precompile

将创建一个 public/assets 目录。在此目录中,您将找到一个 manifest.yml,其中包含 Rails 3 中已编译资产的 md5sum。在 Rails 4 中,该文件将为 manifest-.json。将 public/assets 添加到您的 git 存储库将使其对 Heroku 可用。

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

在此推送代码之后

于 2013-09-05T05:30:17.530 回答