git - Heroku:在本地文件系统中使用外部挂载

标签 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 存储库。这可能吗?如果可能的话,那会有多慢?是否有任何其他替代方案可以实现这一目标?

最佳答案

我还没有找到我的问题的完美答案,但这里有一个可行的解决方法。

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

这是 Procfile:

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

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

我将 Bitbucket 与私有(private)存储库一起使用,因此我创建了一个 SSH key 对并将它们放在“config/ssh/”中。然后,我将公钥添加到我的 Bitbucket 帐户的部署 key 中,并将 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 项目

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

拥有这样的私钥并不理想,但在我的特定情况下,此 key 对于此应用程序是唯一的,仅用于获得对我的代码存储库的只读访问权限。

关于git - Heroku:在本地文件系统中使用外部挂载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13795946/

相关文章:

git - 如何显示最近 24 小时内推送的 git 更改?

node.js - Sequelize 给出 TypeError

python - 在 S3 上存储静态文件,但在本地显示 staticfiles.json

amazon-s3 - 使用pull方法的跨账户codepipeline

git - 我应该在哪里放置我的全局 'gitattributes' 文件?

git - 如何在同一个存储库中保存/维护公共(public)和私有(private)代码? (在存储库托管处)

ruby - 检测是否安装了 git 的独立于平台的方法

ruby-on-rails - rails 4 回形针上传到亚马逊 s3 不起作用

python - 使用 Heroku 安装 Celery 和 Redis

amazon-web-services - 为什么 AWS Lambda CFN S3 响应在删除事件时返回 403?