Heroku:在本地文件系统中使用外部装载

时间:2012-12-10 06:18:42

标签: git heroku amazon-s3 redmine s3fs

我知道可以使用Fuse(s3fs [或s3fsr ruby​​ gem?])安装Amazon S3存储桶。

我的案例是针对Heroku的。

Heroku的文件系统只是为了可扩展性,但是有没有办法在Heroku的文件系统中安装amazon s3?

就我而言,我在Heroku上使用Redmine,并希望使用Redmine的内置git存储库管理将代码评审链接到我的问题。 Redmine需要将存储库克隆到本地目录,这在Heroku上可能但不是持久的。

我希望Redmine在已安装的S3存储桶上维护一个git存储库。这可能吗?如果有可能,那会有多慢?还有其他替代方法可以达到这个目的吗?

2 个答案:

答案 0 :(得分:1)

我没有找到问题的完美答案,但这是一个很好的解决方法。

您可以通过在项目的根目录下创建一个名为Procfile的文件来覆盖默认的Heroku启动脚本(以及更多)。

这是Procfile:

# run custom boot scirpt
web: sh /app/config/web-boot.sh

它告诉Heroku这个脚本启动了Redmine。

我正在使用Bitbucket和私有存储库,因此我创建了一个SSH密钥对并将它们放在'config / ssh /'中。然后,我将公钥添加到我的Bitbucket帐户的部署密钥中,并将Bitbucket的公钥添加到我的'config / ssh / know_hosts'文件中

这是'config / web-boot.sh'文件:

# move ssh keys
mkdir /app/.ssh
cp /app/config/ssh/* /app/.ssh/

# git clone code repos
mkdir /tmp/repos

# Do this for every repo you want to clone
git clone --bare ssh://git@bitbucket.org/[YOUR_ACCOUNT]/[YOUR_REPO].git /tmp/repos/[YOUR_REPO]
git --git-dir=/tmp/repos/[YOUR_REPO] remote add origin ssh://git@bitbucket.org/[YOUR_ACCOUNT]/[YOUR_REPO].git
git --git-dir=/tmp/repos/[YOUR_REPO] fetch origin

# run Unicorn http server
cd /app
bundle exec unicorn -p $PORT -c ./config/unicorn.rb

然后你可以通过指定'/ tmp / repos / [YOUR_REPO]'

将Git存储库添加到Redmine项目中

当您将更改推送到Bitbucket时,可以使用 Redmine Bitbucket Hook plugin 将更改提取到存储库。

使用这样的私钥是不理想的,但在我的具体情况下,此密钥对于此应用程序是唯一的,仅用于获取对我的代码存储库的只读访问权。

答案 1 :(得分:0)

请注意,Heroku现在在启动时在.profile.d /中运行脚本。

https://devcenter.heroku.com/articles/profiled

对于你也可以添加一个'git push'后提交钩子(在.git / hooks / post-commit中),它应该在每次本地提交后将所有更改推送到BitBucket。

https://www.kernel.org/pub/software/scm/git/docs/githooks.html