Mapbox GL持续提示需API访问令牌:已配置.env仍无效
解决Mapbox GL "API access token is required" 报错问题
你遇到的核心问题是环境变量引用错误,导致Mapbox没有拿到有效的访问令牌,咱们一步步来修复:
1. 修正ERB中的环境变量引用
你的.env文件里定义的变量名是MAPBOX_API_KEY,但在html.erb脚本里你错误地把令牌本身当成了环境变量的键来读取,这肯定拿不到有效值:
错误代码:
<script> const venues = <%= raw json_escape(@geojson.to_json) %>; const mapkey = "<%= ENV['pk.eyJ1Ijoia3VtYXNhbsImEiOsafsaiJjanRxd2xvfashfuawbekfjzNGFwMmZlcG1pb3p4In0.F_-z1_nW2O3CYYNOHafafas6rC1A'] %>"; </script>
修正后代码:
<script> const venues = <%= raw json_escape(@geojson.to_json) %>; const mapkey = "<%= ENV['MAPBOX_API_KEY'] %>"; </script>
2. 验证环境变量是否正确加载
- 确保
.env文件放在Rails项目根目录,文件名无额外后缀(比如对应开发环境的.env.development要和当前运行环境匹配) - 如果你用
dotenv-railsgem,必须重启Rails服务器才能让新的环境变量生效——这一步很容易被忽略!
3. 确认Mapbox初始化时正确传入令牌
在你的init_mapbox.js文件(错误栈第23行)中,要确保创建Map实例时正确传入令牌:
mapboxgl.accessToken = mapkey; // 确保这里用的是上面定义的mapkey变量 const map = new mapboxgl.Map({ container: 'map', style: 'mapbox://styles/mapbox/streets-v12', // 其他地图配置项... });
额外检查点
- 可以在ERB中临时输出
<%= ENV['MAPBOX_API_KEY'] %>,验证是否能正确打印令牌值,排除环境变量加载问题 - 确认你的Mapbox令牌包含
styles:read和tiles:read的权限范围
按照以上步骤调整后,地图应该就能正常加载了。
内容的提问来源于stack exchange,提问作者Yuki Mori
相关产品推荐
相关产品推荐

