使用 LoopBack buildpack 部署到 Heroku 会覆盖我对 LoopBack 代码的更改

Deploying to Heroku with LoopBack buildpack overwrites my changes to LoopBack code

我正在使用以下 buildpack 在 Heroku 中部署我的 LoopBack 项目:

https://github.com/strongloop/strongloop-buildpacks.git

不过,我对 LoopBack 用户模型做了一些更改(具体来说,我更改了 ACL 以拒绝 $everyone 访问用户创建),当我在 Heroku 中部署它时,这些更改会被默认值覆盖(即 ACL 允许 $everyone POST 到 /Users)

我的猜测是,在 Heroku 中部署时,我的更改会先放置,然后再安装 buildpack,因此对 LB 源代码的任何更改都会被覆盖。

有什么方法可以更改 LoopBack 源代码并部署到 Heroku?

我是否必须使用我的更改创建自己的构建包?关于如何创建构建包的任何推荐资源?

谢谢!

经过一些研究,我对失败原因的假设似乎是正确的。事实证明,更改被覆盖的原因确实是因为 buildpack 将所有内容安装在您提交给 Heroku 应用程序的任何项目结构之上。

就我而言,由于我的更改涉及更改 StrongLoop 的文件,因此无论何时安装 SL buildpack,这些更改都会丢失。

解法:

我解决这个问题的方法是分叉 StrongLoop's buildpack 然后在 bin/compile 文件中添加几行以使用 sed 删除允许任何人的 ACL 条目 ("$每个人”角色)到 POST 一个新的用户实例:

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 存储库,在那里进行更改,然后使用安装分叉存储库的构建包,但是在我的情况下,这意味着我必须注意提交给原始 StrongLoop 存储库的修复并将它们合并回来,这对于我需要的小改动来说似乎是不必要的。