Heroku:数据库配置没有指定适配器

时间:2013-06-21 08:41:24

标签: ruby heroku ruby-on-rails-4

我在heroku中部署了一个使用postgresql作为数据库的应用程序。我创建了一个新模型,它将连接到远程mysql数据库,如下所示:

# other_database.rb(apps/models/)
class OtherDatabase < ActiveRecord::Base
  self.abstract_class = true
  establish_connection "remote_#{Rails.env}"
end

# other_model.rb(apps/models/)
class OtherModel < OtherDatabase
  self.table_name = "users"
end

我还编辑了database.yml文件并添加了以下条目:

remote_development:
  adapter: mysql2
  encoding: utf8
  reconnect: false
  database: app_development
  pool: 5
  username: root
  password:
  socket: /var/run/mysqld/mysqld.sock

remote_production:
  adapter: mysql2
  encoding: utf8
  reconnect: true
  database: app_production
  pool: 40
  username: root
  password: secretpassword
  socket: /var/run/mysqld/mysqld.sock
  host: 12.34.56.78

远程数据库使用mysql作为其数据库。

它在我的本地机器上工作正常,但是当我将它部署到heroku时,它会创建一个错误页面,所以我查看了heroku日志,我发现了这个:

/app/vendor/bundle/ruby/2.0.0/gems/activerecord-4.0.0.beta1/lib/active_record/connection_adapters/connection_specification.rb:52:in `resolve_hash_connection': database configuration does not specify adapter (ActiveRecord::AdapterNotSpecified)
from /app/vendor/bundle/ruby/2.0.0/gems/activerecord-4.0.0.beta1/lib/active_record/connection_adapters/connection_specification.rb:46:in `resolve_string_connection'

我几乎所有的时间都在寻找一些答案,但无济于事。希望任何人都可以帮助解决这个问题。

TIA。

Eralph

1 个答案:

答案 0 :(得分:3)

Heroku删除并重新创建database.yml文件。这意味着你在database.yml文件中放入的内容将被heroku完全忽略。

在您的establish_connection方法调用中弹出数据库凭据,如下所示:

establish_connection(
  adapter: 'mysql2',
  encoding: 'utf8',
  reconnect: true,
  database: 'app_production',
  pool: 40,
  username: 'root',
  password: 'secretpassword',
  socket: '/var/run/mysqld/mysqld.sock',
  host: '12.34.56.78'
)

但最好使用数据库URL并将其存储在heroku的环境变量中。

heroku config:set MYSQL_DB_URL=http://example.com/rest_of_the_url

然后使用

establish_connection(ENV['MYSQL_DB_URL'])

网址的示例和文档可在此处找到:http://forums.mysql.com/read.php?39,10734,10750