我正在使用以下的buildpack在Heroku中部署我的LoopBack项目:
https://github.com/strongloop/strongloop-buildpacks.git
但是我对LoopBack用户模型做了一些更改(具体来说,我更改了ACL以拒绝每个人访问用户创建),当我在Heroku中部署它时,这些更改会被默认值覆盖(即ACL允许$ everyone发布到/ Users)
我的猜测是,在Heroku中部署时,首先放置我的更改,然后安装buildpack,以便覆盖对LB源代码的任何更改。
有什么方法可以修改LoopBack源代码并部署到Heroku?
我是否必须使用我的更改创建自己的buildpack?关于如何创建buildpack的任何推荐资源?
谢谢!
答案 0 :(得分:0)
经过一些研究后,似乎我对这个失败原因的看法是正确的。事实证明,更改被覆盖的原因确实是因为buildpack会在您提交给Heroku应用程序的任何项目结构之上安装所有内容。
就我而言,由于我的更改涉及更改StrongLoop的文件,因此无论何时安装SL buildpack,这些更改都会丢失。
<强>解决方案:强>
我解决这个问题的方法是分配StrongLoop's buildpack,然后在bin/compile
文件中添加几行以使用sed
删除允许任何人的ACL条目(“$ everyone” 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存储库,在那里进行更改,然后使用安装forked repo的buildpack,但是我的情况意味着我必须注意提交给原始StrongLoop仓库的修复并将它们合并回来,这对于我需要的小改动似乎是不必要的。