2017-07-14 39 views
0

我试图从sqlite3的转换我的RoR应用到PostgreSQL,并在Heroku上部署它(似乎Heroku的不适用使用SQLite好)迁移错误切换RoR中应用到PostgreSQL

这是我的database.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我更换宝石 'sqlite3的' 创业板 'PG'

打字轨分贝:迁移错误是

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

你是在本地或收到此错误在Heroku? –

回答

1

它似乎是在您的本地系统没有创建的数据库名为development

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

然后,您可以用rake db:migrate

运行迁移作为@Micael NUSSBAUMER所说,这是更好地与您的应用程序名称的前缀,环境 实例来命名数据库:testapp_development

+0

它的工作原理,谢谢! –

+0

不客气.. –

1

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

编辑: 我认为是在Heroku上的错误独自一人,但如果它是在本地,那么你就需要在本地计算机上安装PG,创建数据库用户(这是一个时间设置)和然后通过运行: rake db:create ,然后进行迁移,在您的Rails应用程序中创建数据库(在每个运行PG的应用程序上完成)。或rake db:setup

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

1

尝试运行rake db:create后跟rake db:migrate如果您尝试本地。

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

1

是的heroku不适用于sqlite。

只有pg数据库用于heroku。

所以修改的Gemfile与代码:

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

使用上面的代码,你可以在本地使用sqlite分贝工作,pg分贝被用在heroku/