经过一些研究,我对失败原因的假设似乎是正确的。事实证明,更改被覆盖的原因确实是因为 buildpack 将所有内容安装在您提交给 Heroku 应用程序的任何项目结构之上。
就我而言,由于我的更改涉及更改 StrongLoop 的文件,因此无论何时安装 SL buildpack,这些更改都会丢失。
解决方案:
我解决此问题的方法是分叉StrongLoop's buildpack,然后在bin/compile 文件中添加几行以使用sed 删除允许任何人(“$everyone”角色)发布新的ACL 条目用户实例:
status "Removing CREATE permissions for User model"
sed '42,47d' $build_dir/node_modules/loopback/common/models/user.json > $build_dir/node_modules/loopback/common/models/user.tmp
mv $build_dir/node_modules/loopback/common/models/user.tmp $build_dir/node_modules/loopback/common/models/user.json
(link to the position of the lines is here)
在我使用的 SL 版本中,删除了以下几行:
},
{
"principalType": "ROLE",
"principalId": "$everyone",
"permission": "ALLOW",
"property": "login"
(link to GitHub lines here)
然后我使用这个新的 buildpack 创建了一个新的 Heroku 应用程序,该应用程序现在禁止通过“$everyone”角色创建新用户。
注意事项
这当然是一种非常粗略的方法,我认为正确的方法是实际分叉 StrongLoop 存储库,在那里进行更改,然后使用安装分叉存储库的 buildpack,但是在我的情况意味着我必须注意提交给原始 StrongLoop 存储库的修复并将它们合并回来,这对于我需要的小改动来说似乎是不必要的。