我在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
答案 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