我试图将我的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
答案 0 :(得分:1)
似乎未在本地系统中创建名为development
的数据库。
您需要在使用rake db:create
命令运行迁移之前创建数据库。
然后,您可以使用rake db:migrate
正如@Micael Nussbaumer所说,最好使用您的应用名称作为环境的前缀来命名数据库 示例:testapp_development
答案 1 :(得分:1)
我认为名称是应用程序名称前面的环境名称(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
答案 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