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

时间:2017-07-14 10:45:42

标签: ruby-on-rails postgresql

我试图将我的RoR应用程序从sqlite3切换到postgresql,并将其部署在heroku上(似乎heroku对sqlite不起作用)

这是我的database.yml

purrr::map

现在,切换到postgresql是

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

在gemfile中我已经替换了gem&#39; sqlite3&#39;与gem&#39; pg&#39;

输入rails db:migrate错误是

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

4 个答案:

答案 0 :(得分:1)

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

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

然后,您可以使用rake db:migrate

运行迁移

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

答案 1 :(得分:1)

我认为名称是应用程序名称前面的环境名称(RoR PG中的标准名称)。 因此,而不是developmentyourappname_developmentproductionyourappname_production等。 只要您的PG应用程序设置良好,本地应该是相同的。

<强> 编辑: 我认为错误仅在heroku上,但如果它在本地,那么你需要在本地机器上安装PG,创建一个数据库用户(这是一次性设置),然后在rails应用程序中创建数据库(将是在每个运行PG的应用程序上完成,运行: rake db:create 随后是迁移。或rake db:setup

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

答案 2 :(得分:1)

如果您尝试使用本地,请尝试运行rake db:create后跟rake db:migrate

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

答案 3 :(得分:1)

是的heroku不适用于sqlite。

  

在heroku上只使用pg个数据库。

所以用代码修改你的Gemfile:

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

使用上面的代码,您可以在本地使用sqlite db并在pg上使用heroku/ db