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

时间:2016-06-22 23:50:03

标签: heroku loopbackjs strongloop buildpack

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

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

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

我的猜测是,在Heroku中部署时,首先放置我的更改,然后安装buildpack,以便覆盖对LB源代码的任何更改。

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

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

谢谢!

1 个答案:

答案 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"

link to GitHub lines here

然后我使用这个新的buildpack来创建一个新的Heroku应用程序,该应用程序现在禁止通过“$ everyone”角色创建新用户。

<强>注意事项

这当然是实现这一目标的一种非常粗糙的方式,我认为正确的方法是实际分叉StrongLoop存储库,在那里进行更改,然后使用安装forked repo的buildpack,但是我的情况意味着我必须注意提交给原始StrongLoop仓库的修复并将它们合并回来,这对于我需要的小改动似乎是不必要的。