我目前正在dokku实例上部署Angular4应用程序,但是,我一直收到此错误! [remote rejected] develop -> master (pre-receive hook declined)
。
我正在从开发分支部署到master,因此我按照git push mediafactory develop:master
我正在通过Dockerfile进行部署,看起来像这样;
FROM node:carbon
RUN mkdir -p /opt/app
WORKDIR /opt/app
COPY package*.json ./
RUN npm install --save @angular/cli@1.3.0
RUN npm install --only=production
COPY .angular-cli.json .
COPY . .
RUN ng build --aot -prod
ENV APP_ID setYourAppId
ENV MASTER_KEY setYourMasterKey
ENV DATABASE_URI setMongoDBURI
EXPOSE 1337
CMD ["npm", "start"]
我试过了
sudo wget -O /etc/init/docker.conf https://raw.github.com/dotcloud/docker/master/contrib/init/upstart/docker.conf
sudo service docker restart
但是,它似乎无法解决问题。
答案 0 :(得分:3)
我终于得到了问题的解决方案。我知道有人可能会遇到和我一样的问题。
为什么会出现上述问题主要有三个原因。
首先,如果你遇到这个错误,
remote: <app name> is currently being deployed. Exiting...
To <dokku remote>:<app name>
! [remote rejected] develop -> master (pre-receive hook declined)
您可以通过从dokku主机运行这两个命令轻松解决上述问题。
$ sudo wget -O /etc/init/docker.conf https://raw.github.com/dotcloud/docker/master/contrib/init/upstart/docker.conf
$ sudo service docker restart
其次,就我的情况而言,全局节点模块文件夹的权限存在问题,当您尝试全局安装@ angular / cli时会导致无限循环。不幸的是,即使提供权限,pre-receive hook declined
错误也会持续存在。这是因为我正在使用的@ ngular / cli图像。
错误看起来像这样
...
/usr/local/lib/node_modules/@angular/cli/node_modules/node-sass/.node-
gyp/8.9.1
gyp WARN EACCES user "nobody" does not have permission to access the
dev dir
"/usr/local/lib/node_modules/@angular/cli/node_modules/node-sass/.node-
gyp/8.9.1"
gyp WARN EACCES attempting to reinstall using temporary dev dir
"/usr/local/lib/node_modules/@angular/cli/node_modules/node-sass/.node-gyp"
...
您可以通过向Dockerfile
添加以下行来解决上述错误,当且仅当命令$ npm config get prefix
返回/usr/local
之类的内容时,否则您可能会弄乱您的权限。
RUN chown -R $(whoami) $(npm config get prefix)/lib/node_modules
使用此命令在容器中全局安装@ angular / cli
RUN npm install -g --unsafe-perm @angular/cli
这是解决问题的方法。
可能导致此问题的另一个问题是将package-lock.json
添加到您的容器中。您也可以考虑忽略它,因为它可能会导致同样的问题。
因此,新的Dockerfile看起来像这样;
FROM node:carbon
RUN mkdir -p /opt/app
WORKDIR /opt/app
RUN chown -R $(whoami) $(npm config get prefix)/lib/node_modules
RUN npm install -g --unsafe-perm @angular/cli
COPY package.json .
RUN npm install --only=production
COPY .angular-cli.json .
COPY . .
RUN ng build --aot -prod
ENV APP_ID setYourAppId
ENV MASTER_KEY setYourMasterKey
ENV DATABASE_URI setMongoDBURI
EXPOSE 1337
CMD ["npm", "start"]
第三个也是最后一个,如果您使用Vagrant
dokku安装,pre-receive hook declined
错误可能是由于虚拟机内存分配不足造成的。
您可以编辑dokku repo的Vagrantfile
并为虚拟机分配更多内存。例如,您可以通过在Vagrantfile
添加以下行来将内存从1GB增加到2GB;
config.vm.provider :virtualbox do |vb|
vb.customize ["modifyvm", :id, "--memory", 2048]
end
之后,您运行$ vangrant reload
以应用您在Vagrant文件中指定的更改。
如果问题仍然存在,并且您使用的是mongoDB
,则可能需要检出mongo实例,并确保它们按预期运行。您可以通过在dokku主机上运行$ dokku mongo:list
来检查您的mongo实例状态。
最后,如果以上都没有帮助,问题仍然存在,您可能需要销毁您的dokku应用并重新创建一个新应用。在做这件事之前,请特别注意!
You may checkout a tutorial I wrote about deploying 2 apps in the same docker container, with dokku