Laravel 5.4 SQLite路径配置问题:API路由提示“Database does not exist”
解决Laravel中SQLite路径在CLI和Web请求下不一致的问题
这个问题的核心原因其实很简单:CLI(命令行)和Web服务器的工作目录不一样,导致相对路径的指向出现偏差:
- 当你用
php artisan执行命令时,工作目录是你的Laravel项目根目录,所以database/easyresults.sqlite这个相对路径是正确的(指向根目录下的database文件夹)。 - 但Web服务器(比如Apache、Nginx)的默认工作目录是项目的
public文件夹,所以从public目录出发,需要用../database/easyresults.sqlite才能找到数据库文件——这就是为什么两种路径各自只适配一种场景的原因。
最优解决方案:用Laravel辅助函数统一路径
最稳妥的方式是直接在config/database.php中使用Laravel内置的database_path()辅助函数,它会自动根据当前环境的工作目录生成正确的绝对路径,同时完美兼容CLI和Web请求。
修改config/database.php中sqlite的配置项:
'sqlite' => [ 'driver' => 'sqlite', 'database' => env('DB_DATABASE', database_path('easyresults.sqlite')), 'prefix' => '', 'foreign_key_constraints' => env('DB_FOREIGN_KEYS', true), ],
然后你的.env文件可以保持简洁,只需要设置:
DB_CONNECTION=sqlite DB_DATABASE=easyresults.sqlite
(甚至可以省略DB_DATABASE,因为我们已经在config里设置了默认值,但保留它会更直观)
备选方案:使用绝对路径
如果你不想修改config文件,也可以在.env里直接写数据库文件的绝对路径,比如:
DB_DATABASE=/var/www/your-laravel-project/database/easyresults.sqlite
这种方式虽然能解决问题,但缺点是部署到不同服务器或环境时,需要手动修改绝对路径,灵活性不如辅助函数方案。
注意事项
修改配置后,如果之前运行过php artisan config:cache生成了配置缓存,一定要执行:
php artisan config:clear
清除缓存,确保新的配置生效。
内容的提问来源于stack exchange,提问作者kirschkern
相关产品推荐
相关产品推荐

