使用 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"
然后我使用这个新的 buildpack 创建了一个新的 Heroku 应用程序,该应用程序现在已禁用通过“$everyone”角色创建新用户的权限。
注意事项
这当然是一种非常粗略的实现方法,我认为正确的方法是实际分叉 StrongLoop 存储库,在那里进行更改,然后使用安装分叉存储库的构建包,但是在我的情况下,这意味着我必须注意提交给原始 StrongLoop 存储库的修复并将它们合并回来,这对于我需要的小改动来说似乎是不必要的。
我正在使用以下 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"
然后我使用这个新的 buildpack 创建了一个新的 Heroku 应用程序,该应用程序现在已禁用通过“$everyone”角色创建新用户的权限。
注意事项
这当然是一种非常粗略的实现方法,我认为正确的方法是实际分叉 StrongLoop 存储库,在那里进行更改,然后使用安装分叉存储库的构建包,但是在我的情况下,这意味着我必须注意提交给原始 StrongLoop 存储库的修复并将它们合并回来,这对于我需要的小改动来说似乎是不必要的。