Windows 用户真机运行 laraBBS 源码 L03_5.8 可能会碰到的问题及解决方法
⚪ 解决源码包下载不了的问题
尽管github.com可以打开,但是ssh源码包却难以克隆。于是改用码云账号fork如下仓库后刷新,才顺利克隆到本地
gitee.com/open-resource/larabbs
⚪ composer install报错
Windows用户请使用如下命令安装依赖包composer install --ignore-platform-reqs
或者像下图这样修改 composer.json 文件,添加一个 platform: {…} 的配置项。这个方法因为要修改代码,显然比上面的命令行要麻烦得多。
⚪ 数据库迁移报错Syntax error or access violation: 1071 Specified key was too long; max key length is 767 bytes
修改App\Providers\ AppServiceProvider.php文件,boot函数里面增加如下代码
use Illuminate\Support\Facades\Schema;
class AppServiceProvider extends ServiceProvider
{
public function boot()
{
//解决数据迁移的问题
Schema::defaultStringLength(191);
...
}
...
}
⚪ Unable to boot ApiServiceProvider, configure an API domain or prefix.
配置.env文件API_PREFIX=api
⚪ No application encryption key has been specified.
终端执行如下命令即可解决php artisan key:generate
⚪ No hint path defined for [sudosu].
修改config\sudosu.php文件,数组里面增加当前项目正在使用的域名后缀。因为我使用的是 w.bbs.cn 所以数组里面添加了 cn(更好的办法是使用 .test 做测试项目的顶级域名,这样就无需修改代码了)
return [
// 允许使用的顶级域名
'allowed_tlds' => ['dev', 'local', 'test', 'cn'],
...
];
⚪ 页面暂无数据
执行如下命令php artisan migrate --seed
⚪ 页面头像显示不出来
修改datebase\seeds\UsersTableSeeder.php,将$avatars = […]里面的无效链接替换成可以正常显示的图片链接,之后回滚数据库,再重新迁移同时填充假数据
php artisan migrate:rollback
php artisan migrate --seed
⚪ 点击任意一个用户头像,发现vendor\predis\predis\src\Connection\AbstractConnection.php报错,且页面有乱码,甚至于搜狗浏览器连论坛主页都打不开。无论是回滚数据库还是回退版本,错误仍在。
解决方法:启动Win版Redis服务
⚪ windows 安装 redis 方法
访问 microsoftarchive / redis 下载安装程序即可安装,之后进入 redis-server.exe 所在的目录执行命令redis-server --service-install redis.windows-service.conf --loglevel verbose
即可,这条命令会设置 redis 服务开机启动并且不显示cmd窗口。关于redis的更多命令可以阅读文档《Windows Service Documentation.docx》
⚪ Please make sure the PHP Redis extension is installed and enabled.
明明已经启动 redis 服务了,仍然提示PHP的Redis扩展没有安装。解决方法很简单,修改 .env 文件,添加一行配置项 REDIS_CLIENT=predis
如下图所示
⚪ Non-static method Redis::hSet() cannot be called statically
这个是由 Redis 命名空间冲突造成的,这里使用 predis 而不是 php redis 扩展包。解决方法就是关闭 php 的 redis 扩展,这比修改项目代码的 use 语句更方便。
下图展示的是在 phpStudy 中关闭 redis 的方法,去掉对勾即可。效果等同于直接删除 php.ini 文件中的配置项extension=redis
⚪ postman测试接口报错,或者直接在浏览器的地址栏里敲入网址w.bbs.cn/api/topics 并回车,页面报错{“message”:”array_combine(): Both parameters should have an equal number of elements”,”status_code”:500}
解决方法很奇怪,修改.env文件,删除下面这行版本号即可API_VERSION=
⚪ 测试接口还是报错?直接输入网址w.bbs.cn/api/topics 页面报错{“message”:”404 Not Found”,”status_code”:404}
如果主页可以正常打开,但是调用api接口却报404错误,这可能是因为没有配置api前缀导致的。解决方法仍然是修改.env文件,去掉api的域名配置项,改用前缀配置
# API_DOMAIN=http://w.bbs.cn
API_PREFIX=api
# API_VERSION=
⚪ 测试接口仍然报错,页面不存在
在url里面加个版本号v1试试,以我的测试用的域名 w.bbs.cn 为例就是下面这样:
不要访问 w.bbs.cn/api/topics
改成这个 w.bbs.cn/api/v1/topics 再试
⚪ 点击“管理后台”或者直接输入网址w.bbs.cn/admin 页面报错SQLSTATE[42000]: Syntax error or access violation: 1055 ‘larabbs.topics.title’ isn’t in GROUP BY…
修改config\database.php文件,将'strict' => true
改为'strict' => false
⚪ tinker测试oauth报错 ‘cURL error 60: SSL certificate problem: unable to get local issuer certificate (see curl.haxx.se/libcurl/c/libcurl-err...)’
下载文件cacert.pem,之后修改php.ini引入此文件,重启服务器。
[curl]
; A default value for the CURLOPT_CAINFO option. This is required to be an
; absolute path.
curl.cainfo = path\to\cacert.pem
本作品采用《CC 协议》,转载必须注明作者和本文链接