如何配置数据库.yml以部署到Heroku

hmmo2u0o  于 9个月前  发布在  其他
关注(0)|答案(4)|浏览(122)

我最近升级到了最新版本的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:


谢谢

iyfjxgzm

iyfjxgzm1#

我不知道这是不是你想要的,但我自己也花了一段时间才弄明白,所以我想我应该把它贴在这里。
ActiveRecord支持从环境变量DATABASE_URL和数据库.yml文件中获取数据库连接信息。在任何情况下使用哪一个可能有点棘手。幸运的是,这已经基本解决了-请参阅this pull request了解大部分细节。
简而言之,如果database.yml中没有url键,则DATABASE_URL中的信息会自动覆盖database.yml中可以设置的所有内容,包括用户名、密码、服务器、端口、适配器和数据库名称。如果database.yml中有url键,然后覆盖DATABASE_URL环境变量和其他与之冲突的数据库.yml条目。
由于Heroku会自动设置一个完整的DATABASE_URL,基本上除了池和编码之外的所有内容都是从DATABASE_URL中提取的,而database.yml的生产部分中的其他内容都被忽略了。所以你可以将它们留空,或者在你的开发机器上设置任何更方便的内容。
由于可以将ERB放在yml文件中,因此有些资料建议您显式地将

production:
  url: <%= ENV['DATABASE_URL'] %>

字符串
在database.yml中显式地将url设置为env变量。这使得env变量中的任何内容都可以覆盖yml中的所有内容。

j0pj023g

j0pj023g2#

对于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


我根据我写的数据库.yaml代码制作了gem文件代码。你可以在开发和测试环境中使用mysql2。如果你这样做,你可以像下面这样更改gem文件的内容:

gem 'pg', :group => :production
gem 'mysql2' , :group => [:development, :test]


希望这对你有帮助:)

zzwlnbp8

zzwlnbp83#

因亚姆勒
1x个月
这意味着您要将 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

kt06eoxx

kt06eoxx4#

只是在这篇很老的文章中添加一些进一步的信息。Heroku现在(显然)支持MySQL,并且在处理databae.yml文件时有一些复杂的地方。行为取决于您使用的Rails版本,请参阅https://devcenter.heroku.com/articles/rails-database-connection-behavior
如果你和我一样,正在尝试配置某些MySQL参数,并且在使用数据库.yml文件时没有任何运气,因为你可能和我一样,正在升级一个非常旧的Rails 3应用程序,那么你应该知道某些参数可以附加到连接字符串或DATABASE_URL
例如,我需要配置字符排序规则和编码,并成功地完成了以下操作

mysql2://dbuser:host.amazonaws.com:3306/dbname?sslca=config/global-bundle.pem&encoding=utf8mb4&collation=utf8mb4_unicode_ci

字符串
sslca参数指向已签入到项目存储库的config文件夹中的SSL包文件。以下2个参数通常添加到database.yml。
也许这能帮到别人

相关问题