【Rails】在Vagrant环境中使用PostgreSQL的方法
开发环境
・Ruby版本:2.5.7
・Rails版本:5.2.4
・Vagrant版本:2.2.7
・VirtualBox版本:6.1
・PostgreSQL版本:9.2.24
・操作系统:macOS Catalina
实施
1. 登录到vagrant ssh
$ vagrant ssh
2. 将yum更新至最新版本。
$ sudo yum -y update
3. 安装PostgreSQL。
$ sudo yum -y install postgresql
$ sudo yum -y install postgresql-devel
$ sudo yum -y install postgresql-server
运行`psql –version`,如果显示了版本号,则表示安装完成。
$ psql --version
psql (PostgreSQL) 9.2.24
4. 进行 PostgreSQL 初始化
$ sudo postgresql-setup initdb
启动PostgreSQL
$ sudo service postgresql start
创建并登录到PostgreSQL帐户
$ sudo -u postgres psql
postgres=# create role [任意のユーザー名] with createdb login password '[任意のパスワード]';
如果在运行du时添加了Role,则账户创建完成。
postgres=# \du
List of roles
Role name | Attributes | Member of
-------------+------------------------------------------------+-----------
[任意のユーザー名] | Create DB | {}
postgres | Superuser, Create role, Create DB, Replication | {}
检查数据库
查看使用“手順4”的“sudo postgresql-setup initdb”命令创建的数据库。
postgres=# \l
List of databases
Name | Owner | Encoding | Collate | Ctype | Access privileges
-----------+----------+-----------+---------+-------+-----------------------
postgres | postgres | SQL_ASCII | C | C |
template0 | postgres | SQL_ASCII | C | C | =c/postgres +
| | | | | postgres=CTc/postgres
template1 | postgres | SQL_ASCII | C | C | =c/postgres +
| | | | | postgres=CTc/postgres
(3 rows)
请参考下面的文章以了解 template0 和 template1 之间的区别。
PostgreSQL的template0和template1的差异是什么?
创建一个Rails应用
由于默认数据库是SQLite,因此可以通过使用-d选项指定PostgreSQL。
$ rails new sample -d postgresql
9. 编辑数据库配置文件 database.yml
模板可以指定使用 template0 来创建一个全新的数据库。
default: &default
adapter: postgresql
encoding: unicode
template: template0
pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
username: 手順6で設定したユーザー名
password: 手順6で設定したパスワード
创建一个数据库
$ rails db:create
如果出现”身份验证失败的严重错误”,则提示”FATAL: Ident authentication failed for user”。
打开PostgreSQL的配置文件。
$ sudo vi /var/lib/pgsql/data/pg_hba.conf
编辑位于底部的身份验证方式。
请将 METHOD 更改为 md5。
.
.
.
# TYPE DATABASE USER ADDRESS METHOD
# "local" is for Unix domain socket connections only
local all all md5
# IPv4 local connections:
host all all 127.0.0.1/32 md5
# IPv6 local connections:
host all all ::1/128 md5
【常用的认证方式】
ident : 用于验证的数据库所有者必须与执行Shell的操作系统用户名称匹配。
md5 : 通过密码来验证。
trust : 无需验证。
经常使用的命令
【未登录】
sudo service postgresql start : 启动 PostgreSQL
sudo service postgresql stop : 停止 PostgreSQL
sudo service postgresql restart : 重新启动 PostgreSQL
sudo -u postgres psql : 登录 PostgreSQL
【登录后】
\q : 退出登陆
\? : 显示帮助信息
\l : 显示数据库列表
\du : 显示用户列表
\c 数据库名 : 连接到数据库
\z : 显示表格列表