heroku mysql_在Heroku上使用

5.7 在 Heroku 上使用 PostgreSQL - 第五章、用户注册

5.7 在 Heroku 上使用 PostgreSQL

5.7 在 Heroku 上使用 PostgreSQL

Heroku 为 Laravel 应用提供了数据存储的功能,我们可以在 Heroku 上使用 MySQL 或 PostgreSQL 来进行数据存储。由于 Heroku 对 PostgreSQL 的支持比 MySQL 更好,因此本教程中将在 Heroku 上使用 PostgreSQL 来作为我们应用的数据库。

要在 Heroku 上使用 PostgreSQL,我们需要先安装 PostgreSQL 扩展。

$ heroku addons:add heroku-postgresql:hobby-dev

安装完成之后,Heroku 将为我们生成一个唯一的数据库 URL - DATABASE_URL,我们可以通过下面命令查看 Heroku 的所有配置信息:

$ heroku config

在本地开发中,我们使用了 MySQL 来作为数据库储存,但在 Heroku 环境上我们要改为使用 PostgreSQL 来作为数据库储存。因此在进行数据库设置时,我们需要对当前环境进行判断。如果环境为本地环境,则使用 MySQL 数据库,若为 Heroku 环境,则使用 PostgreSQL 数据库。我们可以通过为 Heroku 新增一个 IS_IN_HEROKU 配置项来判断应用是否运行在 Heroku 上。

$ heroku config:set IS_IN_HEROKU=true

一般来说,应用的数据库都在 config/database.php 中进行配置,因此我们需要针对该配置文件,来为不同环境的数据库连接方式定义一个帮助方法,以便根据应用不同的运行环境来指定数据库配置信息,我们需要新建一个 helpers.php 文件并写入以下内容:

bootstrap/helpers.php

function get_db_config()

{

if (getenv('IS_IN_HEROKU')) {

$url = parse_url(getenv("DATABASE_URL"));

return $db_config = [

'connetion' => 'pgsql',

'host' => $url["host"],

'database' => substr($url["path"], 1),

'username' => $url["user"],

'password' => $url["pass"],

];

} else {

return $db_config = [

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

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

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

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

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

];

}

}

可以看到,我们定义了 get_db_config 方法来根据数据库的不同运行环境获取不同的配置信息。通过 Heroku 生成的 DATABASE_URL 包含了一切与数据库相关的配置信息,如主机、用户名、密码、数据库等,因此我们需要使用 parse_url 方法对其进行解析,来获取到指定的值。当运行环境为 Heroku 时,我们使用 DATABASE_URL 提供的数据库配置信息,如果为其它环境,则使用默认的数据库配置信息。

在我们新增 helpers.php 文件之后,还需要在应用中对该文件进行配置,自动加载该文件。

bootstrap/autoload.php

.

.

.

require __DIR__.'/helpers.php';

现在,让我们使用刚刚定义好的 get_db_config 方法对数据库进行配置。

config/database.php

$db_config = get_db_config();

return [

'fetch' => PDO::FETCH_CLASS,

'default' => $db_config['connetion'],

'connections' => [

'sqlite' => [

'driver' => 'sqlite',

'database' => database_path('database.sqlite'),

'prefix' => '',

],

'mysql' => [

'driver' => 'mysql',

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

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

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

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

'charset' => 'utf8',

'collation' => 'utf8_unicode_ci',

'prefix' => '',

'strict' => false,

],

'pgsql' => [

'driver' => 'pgsql',

'host' => $db_config['host'],

'database' => $db_config['database'],

'username' => $db_config['username'],

'password' => $db_config['password'],

'charset' => 'utf8',

'prefix' => '',

'schema' => 'public',

],

'sqlsrv' => [

'driver' => 'sqlsrv',

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

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

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

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

'charset' => 'utf8',

'prefix' => '',

],

],

'migrations' => 'migrations',

'redis' => [

'cluster' => false,

'default' => [

'host' => env('REDIS_HOST', 'localhost'),

'password' => env('REDIS_PASSWORD', null),

'port' => env('REDIS_PORT', 6379),

'database' => 0,

],

],

];

现在整个用户注册功能到此已开发完毕。让我们将改动的代码进行提交,并推送到 GitHub 和 Heroku 上。

$ git add -A

$ git commit -m "Updated database configuration"

$ git push

$ git push heroku master

我们可以使用 heroku run 在 Heroku 运行 Laravel 的指定命令。现在我们需要在 Heroku 上执行迁移,生成用户表,可通过下面命令来完成:

$ heroku run php artisan migrate

若提示是否要在生产环境上运行此命令,请输入 yes。

如果你要在 Heroku 上重置 PostgreSQL 数据库,可以使用以下命令:

$ heroku pg:reset DATABASE

$ heroku run php artisan migrate

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值