我最近升级到了最新版本的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:
型
谢谢
4条答案
按热度按时间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文件中,因此有些资料建议您显式地将
字符串
在database.yml中显式地将url设置为env变量。这使得env变量中的任何内容都可以覆盖yml中的所有内容。
j0pj023g2#
对于Heroku,你必须使用postgresql,因为它不支持mysql2。Heroku有自己的机制来处理数据库,你可以在这里阅读更多:https://devcenter.heroku.com/articles/heroku-postgresql
从本质上讲,你在这个文件中定义的“heroku的数据库”和本地数据库是完全不同的。这将使你更容易在本地和测试环境中使用sqlite,而对于生产环境,你应该将你的yaml代码改为:
字符串
上面的代码还不足以让它在heroku上工作,你还需要像下面这样编辑gemfile内容:
型
我根据我写的数据库.yaml代码制作了gem文件代码。你可以在开发和测试环境中使用mysql2。如果你这样做,你可以像下面这样更改gem文件的内容:
型
希望这对你有帮助:)
zzwlnbp83#
因亚姆勒
1x个月
这意味着您要将 default 附加到组中,因此,
字符串
等于该
型
kt06eoxx4#
只是在这篇很老的文章中添加一些进一步的信息。Heroku现在(显然)支持MySQL,并且在处理databae.yml文件时有一些复杂的地方。行为取决于您使用的Rails版本,请参阅https://devcenter.heroku.com/articles/rails-database-connection-behavior
如果你和我一样,正在尝试配置某些MySQL参数,并且在使用数据库.yml文件时没有任何运气,因为你可能和我一样,正在升级一个非常旧的Rails 3应用程序,那么你应该知道某些参数可以附加到连接字符串或
DATABASE_URL
中例如,我需要配置字符排序规则和编码,并成功地完成了以下操作
字符串
sslca参数指向已签入到项目存储库的config文件夹中的SSL包文件。以下2个参数通常添加到database.yml。
也许这能帮到别人