Laravel5.5:在Heroku上使用Redis来保存会话
我们将把在生产环境中使用的Heroku上的会话存储位置从默认文件更改为Redis。然而,这不是必需的。即使存储位置仍然是文件,也没有任何问题。此外,在Heroku上使用Redis,即使是免费计划,也需要注册信用卡。
以下将假设您已经安装了Heroku CLI。
母親的話
在Laravel 5.5中创建基本的CRUD操作 – Qiita
添加插件
创建一个新实例
# 無料プランでRedisを使う
> heroku addons:create heroku-redis:hobby-dev
Hobby Dev计划是免费的,但需要注册信用卡。
您可以通过下面的链接转至注册页面。
https://heroku.com/verify
如果您未注册,则会收到以下警告。
> heroku addons:create heroku-redis:hobby-dev
Creating heroku-redis:hobby-dev on sutara79-laravel... !
! Please verify your account to install this add-on plan (please enter a credit card) For more information, see
! https://devcenter.heroku.com/categories/billing Verify now at https://heroku.com/verify
获取认证信息
在Laravel中使用从下面命令中得到的REDIS_URL中的密码、主机和端口。
> heroku config | Select-String REDIS
REDIS_URL: redis://<ユーザー>:<パスワード>@<ホスト>:<ポート>
然而,根据官方文档的警告,REDIS_URL可能随时会发生变化。
不仅仅是简单地复制数值,还需要动态地从REDIS_URL中提取所需的数值。
为了使Heroku能够管理此插件并对各种操作情况作出响应,REDIS配置变量可能会随时更改。如果在Heroku应用程序外依赖配置变量,则可能需要重新复制该值如果发生变化。
创建一个新实例
即时提取认证信息
在Heroku上使用Laravel使用Redis很有参考价值 – Qiita
// ファイル冒頭に追加
if (getenv('REDIS_URL')) {
$url = parse_url(getenv('REDIS_URL'));
putenv('REDIS_HOST='.$url['host']);
putenv('REDIS_PORT='.$url['port']);
putenv('REDIS_PASSWORD='.$url['pass']);
}
PHP: parse_url – 手册
PHP: getenv – 手册
PHP: putenv – 手册
在本地进行操作确认
请确保正确解析URL。
请预先确保在本地能够使用Redis。
在本地环境中使用Redis来保存会话。
请按照以下方式更改环境设置。
# コメントアウトする
# REDIS_HOST=127.0.0.1
# REDIS_PASSWORD=null
# REDIS_PORT=6379
# 上の設定をHerokuのREDIS_URLの形式にあてはめる
REDIS_URL=redis://foo:null@127.0.0.1:6379
只需要一个选项的话,以下是对原文的中文翻译:
接下来的步骤和上面的文章中的确认方法是相同的。
请从浏览器访问预先创建好的路由(https://(域名)/test-session)。
然后,在Redis的图形用户界面工具中确认会话是否已保存。
确认完成后,请将其推送到Heroku。
> git push heroku master
在Heroku上真正使用Redis
# Herokuでのセッションの保存先を`redis`に変更
> heroku config:set SESSION_DRIVER=redis
确认行动
首先,与本地操作确认相同,我们从浏览器访问https://(域名)/test-session。
接下来,我想要确认会话是否已保存,但在Heroku上似乎没有提供可视化界面,所以我们需要通过命令来进行确认。
如果在选项中指定Heroku应用程序名称,您可以使用一个命令连接到Heroku的Redis。
> heroku redis:cli -a sutara79-laravel -c sutara79-laravel
顺便一提,redis:cli的帮助如下所示。
> heroku redis:cli --help
Usage: heroku redis:cli [DATABASE] [flags]
opens a redis prompt
Flags:
-a, --app (required) app to run command against
-c, --confirm
-r, --remote git remote of app to use
连接后,可以正常使用Redis命令。首先,使用 `KEYS *` 获取所有键,并从中查找用于Laravel会话的键,然后使用 `GET` 获取该键的内容。其中包含“こんにちはこんにちは!”的内容,说明会话已正确保存在Redis中。断开连接使用 `QUIT` 命令。在我安装的Redis中,也可以使用 `exit` 命令,但这似乎不是官方提供的命令。
整理步驟。
# Redisに接続
> heroku redis:cli -a sutara79-laravel -c sutara79-laravel
Connecting to redis-angular-23368 (REDIS_URL):
# すべてのキーを取得
> keys *
1) laravel:SeDXaIe5ffKdZhdeHpgy8wLnhjyXJTOSps5o43fJ
# キーの中身をGETで取得
# 「こんにちはこんにちは!!」が含まれていることを確認
> get laravel:SeDXaIe5ffKdZhdeHpgy8wLnhjyXJTOSps5o43fJ
s:316:"a:6:{s:6:"_token";s:40:"gz7JGwGUOFdatn2uQfxhaG1CYGoPJKiB0vTufxLW";s:6:"locale";s:2:"en";s:9:"_previous";a:1:{s:3:"url";s:50:"http://sutara79-laravel.herokuapp.com/test-session";}s:22:"PHPDEBUGBAR_STACK_DATA";a:0:{}s:6:"_flash";a:2:{s:3:"old";a:0:{}s:3:"new";a:0:{}}s:3:"foo";s:32:"こんにちはこんにちは!!";}";
# 切断にはQUITを使う
> quit
OK
# (EXITは使えない)
> exit
ERR unknown command 'exit'