在RoR应用程序中切换到postgresql时发生迁移错误



我正试图将我的RoR应用程序从sqlite3切换到postgresql,并将其部署在heroku上(看来heroku与sqlite配合不好)

这是我的数据库。yml

default: &default
adapter: sqlite3
pool: 5
timeout: 5000
development:
<<: *default
database: db/development.sqlite3

test: &test
<<: *default
database: db/test.sqlite3
production:
<<: *default
database: db/production.sqlite3
cucumber:
<<: *test

现在,切换到postgresql是

default: &default
adapter:  postgresql
encoding: unicode
pool: 5
timeout: 5000
development:
<<: *default
database: development

test: &test
<<: *default
database: test
production:
<<: *default
database: production
cucumber:
<<: *test

在gemfile中,我已将gem"sqlite3"替换为gem"pg">

键入rails-db:migrate错误为

ActiveRecord::NoDatabaseError: FATAL:  database "development" does not exist

本地系统中似乎没有创建名为development的数据库。

在使用rake db:create命令运行迁移之前,您需要创建数据库。

然后,您可以使用rake db:migrate运行迁移

正如@Micael Nussbauer所说,最好用你的应用程序名称作为环境前缀来命名你的数据库示例:testapp_development

我相信这些名称是由应用程序名称前缀的环境名称(RoR PG中的标准名称)。因此取代了developmentyourappname_developmentproductionyourappname_production等。只要您的PG应用程序设置良好,本地应该是相同的。

编辑: 我认为错误仅发生在heroku上,但如果是本地错误,则需要在本地计算机上安装PG,创建一个数据库用户(这是一次性设置),然后在rails应用程序中创建数据库(在运行PG的每个应用程序上完成),方法是运行:rake db:create然后是迁移。或rake db:setup

在Heroku上,您不需要创建数据库,但您需要运行迁移(每次需要迁移时),除非您在app.json清单的"部署后"挂钩中指定运行rake db:migrate

如果您在本地尝试,请尝试先运行rake db:create,然后运行rake db:migrate

我建议你根据你的项目更改数据库的名称。

是的,heroku不适用于sqlite。

heroku上仅使用pg数据库。

所以用代码修改您的Gemfile:

gem 'pg', group: :production
gem 'sqlite3', group: :development

使用上面的代码,您可以在本地使用sqlitedb,pgdb用于heroku/

相关内容

  • 没有找到相关文章

最新更新