将SQLite更改为PostgreSQL的方法
简要介绍
我在将Rails应用部署到Heroku之前,意识到Heroku不支持SQLite,因此我将其更改为PostgreSQL。下面是我要介绍的步骤。
过程
步骤1:安装PostgreSQL
首先,需要在系统中安装PostgreSQL。如果使用Mac操作系统,可以使用Homebrew来进行安装。
brew install postgresql
第二步:更新Gemfile
接下来,我们将更新Rails应用程序的Gemfile。使用pg(PostgreSQL)的gem来替代sqlite3。
gem 'pg'
当Gemfile文件被更新后,通过以下命令来安装新的gem。
bundle install
步骤3:更新database.yml文件
请更新config/database.yml文件,将其指向PostgreSQL数据库。
下面是一个示例。这次我们将应用程序名称设为myapp,开发环境的数据库名称为myapp_development,测试环境的数据库名称为myapp_test。
补充说明一下,即使使用my_app_development或my_app_test,也没有违反Ruby的命名规范。
第一个设置
在本地开发和测试中,我们假设使用特定的数据库用户和密码,而在生产环境(Heroku)中使用DATABASE_URL来进行配置。
default: &default
adapter: postgresql
encoding: unicode
pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
username: <%= ENV['DATABASE_USERNAME'] %>
password: <%= ENV['DATABASE_PASSWORD'] %>
host: <%= ENV['DATABASE_HOST'] %>
development:
<<: *default
database: myapp_development
test:
<<: *default
database: myapp_test
production:
<<: *default
url: <%= ENV['DATABASE_URL'] %>
第二个设定
这里假设在所有环境(本地开发、测试、生产)中都会使用特定的数据库用户和密码,并且在生产环境(Heroku)中还会使用DATABASE_URL。
default: &default
adapter: postgresql
encoding: unicode
pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
development:
<<: *default
database: myapp_development
username: <%= ENV['DATABASE_USERNAME'] %>
password: <%= ENV['DATABASE_PASSWORD'] %>
host: <%= ENV['DATABASE_HOST'] %>
test:
<<: *default
database: myapp_test
username: <%= ENV['DATABASE_USERNAME'] %>
password: <%= ENV['DATABASE_PASSWORD'] %>
host: <%= ENV['DATABASE_HOST'] %>
production:
<<: *default
url: <%= ENV['DATABASE_URL'] %>
一般而言,在使用Heroku的生产环境中,应该使用DATABASE_URL,而在其他环境中应该使用自定义的用户名和密码作为第一个设置。不过,根据具体的环境等情况,适当的设置可能会有所不同。
第四步:创建数据库
用新的设置创建数据库。
rails db:create
步骤5:执行迁移
最后,将执行数据库迁移。
rails db:migrate
你可以按照上述步骤将Rails应用程序的数据库从SQLite更改为PostgreSQL。