如何配置 database.yml 以部署到 Heroku
How to configure database.yml for deployment to 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:
谢谢
在 yaml 中
<<: *default
这意味着您要将 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
对于 Heroku,您将不得不使用 postgresql,因为它不支持 mysql2。 Heroku 有自己的数据库处理机制,您可以在此处阅读更多信息:https://devcenter.heroku.com/articles/heroku-postgresql
本质上,"heroku's databases" 和您在此文件中定义的本地数据库完全不同。在本地和测试环境中使用 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]
希望这对您有所帮助..:)
我不知道这是否正是您想要的,但我自己花了一些时间来解决这个问题,所以我想我会 post 在这里。
ActiveRecord 支持从环境变量 DATABASE_URL
和 database.yml 文件获取数据库连接信息。在任何情况下究竟使用哪个可能有点棘手。幸运的是,这大部分已经得到解决 - 请参阅 this 拉取请求了解大部分细节。
简短的版本是,如果您的 database.yml 中没有 url 键,那么 DATABASE_URL
中的信息会自动覆盖 database.yml 中的所有内容可以设置 URL 中存在的内容,包括用户名、密码、服务器、端口、适配器和数据库名称。如果 database.yml 中有一个 url 键,那么它将覆盖 DATABASE_URL
env var 以及它在 database.yml 条目中与之冲突的所有其他内容。
由于 Heroku 自动设置了一个完整的 DATABASE_URL
,基本上除了池和编码之外的所有内容都是从中获取的,而 database.yml 的生产部分中的其他内容的条目将被忽略。所以你可以将它们留空,或者在你的开发机器上设置任何对你来说更方便的东西。
既然可以把ERB放在yml文件里,some sources建议你明确地把
production:
url: <%= ENV['DATABASE_URL'] %>
在您的 database.yml 中明确将 url 设置为环境变量。这使得环境变量中的任何内容都意味着覆盖 yml 中的所有内容。
我最近升级到最新版本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:
谢谢
在 yaml 中
<<: *default
这意味着您要将 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
对于 Heroku,您将不得不使用 postgresql,因为它不支持 mysql2。 Heroku 有自己的数据库处理机制,您可以在此处阅读更多信息:https://devcenter.heroku.com/articles/heroku-postgresql
本质上,"heroku's databases" 和您在此文件中定义的本地数据库完全不同。在本地和测试环境中使用 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]
希望这对您有所帮助..:)
我不知道这是否正是您想要的,但我自己花了一些时间来解决这个问题,所以我想我会 post 在这里。
ActiveRecord 支持从环境变量 DATABASE_URL
和 database.yml 文件获取数据库连接信息。在任何情况下究竟使用哪个可能有点棘手。幸运的是,这大部分已经得到解决 - 请参阅 this 拉取请求了解大部分细节。
简短的版本是,如果您的 database.yml 中没有 url 键,那么 DATABASE_URL
中的信息会自动覆盖 database.yml 中的所有内容可以设置 URL 中存在的内容,包括用户名、密码、服务器、端口、适配器和数据库名称。如果 database.yml 中有一个 url 键,那么它将覆盖 DATABASE_URL
env var 以及它在 database.yml 条目中与之冲突的所有其他内容。
由于 Heroku 自动设置了一个完整的 DATABASE_URL
,基本上除了池和编码之外的所有内容都是从中获取的,而 database.yml 的生产部分中的其他内容的条目将被忽略。所以你可以将它们留空,或者在你的开发机器上设置任何对你来说更方便的东西。
既然可以把ERB放在yml文件里,some sources建议你明确地把
production:
url: <%= ENV['DATABASE_URL'] %>
在您的 database.yml 中明确将 url 设置为环境变量。这使得环境变量中的任何内容都意味着覆盖 yml 中的所有内容。