我正试图将我的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中的标准名称)。因此取代了development
、yourappname_development
、production
、yourappname_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
使用上面的代码,您可以在本地使用sqlite
db,pg
db用于heroku/