如何配置database.yml以部署到Heroku
我最近升级到最新版本的Rails,我不明白如何将应用程序部署到Heroku。
这是我的database.yml
文件
default: &default adapter: postgresql pool: 5 timeout: 5000 development: <<: *default database: db/development.sqlite3 test: <<: *default database: db/test.sqlite3 production: <<: *default database: db/production.sqlite3
我之前从未在database.yml中看到过这种语法。 有谁知道如何配置这个?
它看起来与我以前有很多不同
development: adapter: mysql2 encoding: utf8 database: my_app_development pool: 5 username: root password: test: adapter: mysql2 encoding: utf8 database: my_app_test pool: 5 username: root password: production: adapter: mysql2 encoding: utf8 database: ymca_gym_production pool: 5 username: root password:
谢谢
对于Heroku,你将不得不使用postgresql,因为它不支持mysql2。 Heroku有自己的机制来处理数据库,您可以在这里阅读更多信息: https : //devcenter.heroku.com/articles/heroku-postgresql
从本质上讲,处理“heroku的数据库”和您在此文件中定义的本地数据库完全不同。 您可以更轻松地将sqlite用于本地和测试环境,对于生产,您应该将yaml代码更改为:
development: adapter: mysql2 encoding: utf8 database: my_app_development pool: 5 username: root password: test: adapter: sqlite3 database: db/development.sqlite3 pool: 5 timeout: 5000 production: adapter: postgresql database: my_database_production pool: 5 timeout: 5000
上面的代码还不足以使它在heroku上工作,你还需要编辑gemfile内容,如下所示:
gem 'pg', :group => :production gem 'mysql2' , :group => :development gem 'sqlite3', :group => :test
我根据我编写的database.yaml代码制作了gemfile代码。 您可以将mysql2用于开发和测试环境。 如果您这样做,您可以更改gemfile内容,如下所示:
gem 'pg', :group => :production gem 'mysql2' , :group => [:development, :test]
希望这可以帮助.. :)
在yaml
<<: *default
这意味着您要将默认值附加到组,所以这个
default: &default adapter: postgresql pool: 5 timeout: 5000 development: <<: *default database: db/development.sqlite3
等于这个
development: adapter: postgresql pool: 5 timeout: 5000 database: db/development.sqlite3
我不知道这是不是你想要的,但我只是花了一段时间自己搞清楚这一点,所以我想我会把它发布在这里。
ActiveRecord支持从环境变量DATABASE_URL
和database.yml文件中获取数据库连接信息。 在任何情况下使用哪一个都可能有点棘手。 幸运的是,这已经基本上得到了解决 – 请参阅此拉取请求了解大部分细节。
简短的版本是,如果你的database.yml中没有url键,那么DATABASE_URL
的信息会自动覆盖database.yml,以获取URL中可以设置的所有内容,包括用户名,密码,服务器,端口,适配器和数据库名称。 如果database.yml中有url键,则会覆盖DATABASE_URL
env var以及它在database.yml条目中与之冲突的所有其他内容。
由于Heroku自动设置完整的DATABASE_URL
,基本上除了池和编码之外的所有内容都是从中获取的,并且忽略了database.yml的production部分中其他内容的条目。 因此,您可以将它们留空,或者在开发机器上设置更方便的任何内容。
由于可以将ERB放在yml文件中,因此某些来源建议您明确放置
production: url: <%= ENV['DATABASE_URL'] %>
在您的database.yml中将url显式设置为env var。 这使得更清楚的是env var中的任何内容都意味着覆盖yml中的所有内容。