heroku mysql_解决一些在 Heroku 上使用 PostgreSQL 的疑惑

别跳过这一节,通过这一节,可以学习到一些数据库的配置的知识.

常规操作

通常我们在连接数据库的时候,会在 config/database.php 中使用 env() 函数来获取 .env 文件中的数据库配置信息,下面我把 config/database.php 拿出来并省略一些无关代码,然后写上一些注释,以供参考

return [

/*下面这一行代码说明你要连接什么数据库,默认是mysql,我们本地环境中的也是mysql,所以这里最终就是mysql.如果

你在heroku上使用,这里就需要改成pgsql,怎么改,教程里也写了,但是有些小伙伴有点懵,我稍后讲解怎么来更简单的操

作,当然简单操作的代价就是牺牲灵活性.*/

'default' => env('DB_CONNECTION', 'mysql'),

'connections' => [

//mysql不需要修改

'mysql' => [

'driver' => 'mysql',

'host' => env('DB_HOST', '127.0.0.1'),

'port' => env('DB_PORT', '3306'),

'database' => env('DB_DATABASE', 'forge'),

'username' => env('DB_USERNAME', 'forge'),

'password' => env('DB_PASSWORD', ''),

'unix_socket' => env('DB_SOCKET', ''),

'charset' => 'utf8mb4',

'collation' => 'utf8mb4_unicode_ci',

'prefix' => '',

'strict' => true,

'engine' => null,

],

//下面的连接信息需要修改,我已经改掉了,怎么改,后面说

'pgsql' => [

'driver' => 'pgsql',

'host' => 'ec2-54-243-46-32.compute-1.amazonaws.com',

'port' => '5432',

'database' => 'db5pg2ugul7b02',

'username' => 'zifcipmvodyqle',

'password' => '8129f821b4729d9b89c4c0b9ca530652b3d768e881c8df6d23cad66b1e464437',

'charset' => 'utf8',

'prefix' => '',

'schema' => 'public',

'sslmode' => 'prefer',

],

.

.

.

如何获取heroku上的数据库连接信息

方式一

方式一就是教程里写的方式,通过 $url = parse_url(getenv("DATABASE_URL")) 这一行代码来获取,这里的几个返回值我说明一下:

DATABASE_URL 这是在你heroku上创建了 Postgres 数据库之后 heroku给你提供的一个URL,里面包含了数据库的连接信息,如何查看这个URL呢?使用 heroku config 这个命令,看图

810f47027b182cf193c0f149041af905.png它给我们显示了包括第2.4节设置的 APP_KEY 变量在内的环境变量.所以我们可以在项目中使用 getenv("DATABASE_URL") 来获取,获取到之后,接下来需要解析这一段URL .

parse_url(getenv("DATABASE_URL")) 这里的 parse_url() 函数将该URL解析出来,并返回一个数组,数组内容如下

c73ed7a2f5510a1de51f37455451f83f.png进一步说就是我们得到了一个关于Postgres 数据库的连接信息,接下来我用Navicat,填入相关信息,连接一下(没啥用,就是进去看看)

03ef8f302b6627c6f443d708f2266414.png

c0ed6196c5f6c8aa1617c031c57c8f76.png

会看到属于我们的数据库已经创建成功了,这里面有很多别人的数据库,我们没权限访问.

既然得到了数据库信息,就可以像教程里一样来操作了.下面我写写我的方式,比较 简单暴力

方式二

使用heroku提供的命令 heroku pg:credentials:url DATABASE 来获取,看图

ff0f969710a9d67133a9df734e06a584.png显示出了数据库信息,既然我们得到了数据库连接信息,就可以自行更改 config/database.php 文件了(真实项目不推荐这样做),下面我把更改后的文件去掉无关内容,贴出来,写一些注释

return [

/*下面这一行代码,我判断 IS_IN_HEROKU 为真,就设置pgsql,不然就获取 `.env` 文件中的,在heroku

中,IS_IN_HEROKU=true(上文图中有显示),所以在heroku中,这里变成了pgsql,然后就会读取pgsql的配置,往下看*/

'default' => getenv('IS_IN_HEROKU') ? 'pgsql' : env('DB_CONNECTION', 'mysql'),

'connections' => [

'mysql' => [

'driver' => 'mysql',

'host' => env('DB_HOST', '127.0.0.1'),

'port' => env('DB_PORT', '3306'),

'database' => env('DB_DATABASE', 'forge'),

'username' => env('DB_USERNAME', 'forge'),

'password' => env('DB_PASSWORD', ''),

'unix_socket' => env('DB_SOCKET', ''),

'charset' => 'utf8mb4',

'collation' => 'utf8mb4_unicode_ci',

'prefix' => '',

'strict' => true,

'engine' => null,

],

//下面我直接把数据库信息写死在这里,但是失去了灵活性

'pgsql' => [

'driver' => 'pgsql',

'host' => 'ec2-54-243-46-32.compute-1.amazonaws.com', //

'port' => '5432', //

'database' => 'db5pg2ugul7b02', //

'username' => 'zifcipmvodyqle', //

'password' => '8129f821b4729d9b89c4c0b9ca530652b3d768e881c8df6d23cad66b1e464437', //

'charset' => 'utf8',

'prefix' => '',

'schema' => 'public',

'sslmode' => 'prefer',

],

然后推送并执行迁移

$ git push heroku master

$ heroku run php artisan migrate

注册一个用户,正常

8cb83d8e1c51c139e206dfbcf49b031c.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值