Vas*_*rth 122 database sqlite postgresql ruby-on-rails heroku
我有一个rails应用程序,其数据库在SQLite(开发和生产).由于我要转移到heroku,我想将我的数据库转换为PostgreSQL.
无论如何,我听说本地的开发数据库不需要从SQLite更改,所以我不需要改变它,但是,如何将生产环境从SQLite更改为PostgreSQL?
有没有人曾经这样做过,可以帮忙吗?
PS我不确定这个过程到底是什么,但我听说过将数据库从SQLite迁移到PostgreSQL,需要做什么?
Chr*_*tto 99
您可以将database.yml更改为此而不是使用开箱即用的sqlite:
development:
adapter: postgresql
encoding: utf8
database: project_development
pool: 5
username:
password:
test: &TEST
adapter: postgresql
encoding: utf8
database: project_test
pool: 5
username:
password:
production:
adapter: postgresql
encoding: utf8
database: project_production
pool: 5
username:
password:
cucumber:
<<: *TEST
Run Code Online (Sandbox Code Playgroud)
ard*_*igh 44
以下步骤对我有用.它使用了由Heroku创建并在Ryan Bates的Railscast#342中提到的水龙头宝石.有几个步骤,但它工作得很好(即使日期已正确迁移),它比Oracle - > DB2或SQL Server - >我过去做过的Oracle迁移要容易得多.
请注意,SQLite没有用户ID或密码,但是taps gem需要一些东西.我刚刚使用了文字"user"和"password".
为新数据库创建Postgres数据库用户
$ createuser f3
Shall the new role be a superuser? (y/n) n
Shall the new role be allowed to create databases? (y/n) y
Shall the new role be allowed to create more new roles? (y/n) y
Run Code Online (Sandbox Code Playgroud)
编辑 - 下面更新的命令 - 改为使用它
$ createuser f3 -d -s
Run Code Online (Sandbox Code Playgroud)
创建所需的数据库
$ createdb -Of3 -Eutf8 f3_development
$ createdb -Of3 -Eutf8 f3_test
Run Code Online (Sandbox Code Playgroud)
更新Gemfile
gem 'sqlite3'
gem 'pg'
gem 'taps'
$ bundle
Run Code Online (Sandbox Code Playgroud)
更新database.yml
#development:
# adapter: sqlite3
# database: db/development.sqlite3
# pool: 5
# timeout: 5000
development:
adapter: postgresql
encoding: unicode
database: f3_development
pool: 5
username: f3
password:
#test:
# adapter: sqlite3
# database: db/test.sqlite3
# pool: 5
# timeout: 5000
test:
adapter: postgresql
encoding: unicode
database: f3_test
pool: 5
username: f3
password:
Run Code Online (Sandbox Code Playgroud)
在sqlite数据库上启动点击服务器
$ taps server sqlite://db/development.sqlite3 user password
Run Code Online (Sandbox Code Playgroud)
迁移数据
$ taps pull postgres://f3@localhost/f3_development http://user:password@localhost:5000
Run Code Online (Sandbox Code Playgroud)
重新启动Rails Web服务器
$ rails s
Run Code Online (Sandbox Code Playgroud)
清理Gemfile
#gem 'sqlite3'
gem 'pg'
#gem 'taps'
$ bundle
Run Code Online (Sandbox Code Playgroud)
K A*_*RAM 11
现在使用单个命令变得容易
bin/rails db:system:change --to=postgresql
Run Code Online (Sandbox Code Playgroud)
由于您要转移到heroku,您可以使用点按来执行此操作:
heroku db:push
Run Code Online (Sandbox Code Playgroud)
这将推动您的本地开发sqlite数据生产,heroku将自动转换为postgres为您.
这也应该可以将生产sqlite db推送到heroku,但它没有经过测试.
RAILS_ENV=production heroku db:push
Run Code Online (Sandbox Code Playgroud)
只需更新config/database.yml文件:
default: &default
adapter: postgresql
encoding: unicode
pool: 5
development:
<<: *default
database: projectname_development
test:
<<: *default
database: projectname_test
production:
<<: *default
database: projectname_production
username:
password:
Run Code Online (Sandbox Code Playgroud)
以上是您运行时生成的内容:
$ rails new projectname --database=postgresql --skip-test-unit
Run Code Online (Sandbox Code Playgroud)
同时将其添加到您的Gemfile:
gem 'pg'
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
73420 次 |
| 最近记录: |