【问题标题】:Heroku (and similar services): clone, commit and push to Git RepositoryHeroku(和类似的服务):克隆、提交和推送到 Git 存储库
【发布时间】:2013-11-03 22:25:07
【问题描述】:

我希望我的 Rails 应用程序在访问者在 Web 应用程序上输入一些值后提交并推送 git 更改。 在开发过程中,我使用a Ruby Gem 提交和推送更改,从而将存储库克隆到文件系统上。更改会写入这些文件,然后由 Gem 提交和推送。

Heroku 仅提供只读文件系统。

有什么办法吗

  • 在不访问文件系统的情况下提交和推送文件?
  • 将存储库克隆到一个临时文件夹并在那里提交?
  • 使用其他类似于 Heroku 的主机,允许写入文件系统?

我是否忘记了在远程 git 存储库上实现更改的任何明显方法?

【问题讨论】:

  • 有趣。我从来没有做过,但我想知道是否可以将 github api 构建到您的应用程序中——直接将更改写入您的 github 存储库,然后使用 heroku 的后台任务插件之一从 github 重新部署进行了观察更改。
  • 感谢您的评论。看起来 GitHub 内置了 File CRUD API:github.com/blog/…(用于更新:developer.github.com/v3/repos/contents/#update-a-file

标签: ruby-on-rails ruby git heroku


【解决方案1】:

几年前我做过something similar,当时在heroku上工作,今天应该仍然有效。

基本上:您可以在/tmp 中实际使用文件系统。
因此,您必须在该存储库中克隆并在那里进行更改。

然而,虽然这在 heroku 上是绝对可行的,但您最终会得到大量特定于平台的代码,这可能会使移出 heroku 变得困难。
使用 cmets 中推荐的 GitHub 文件 CRUP API 似乎是一个更好的解决方案。

【讨论】:

  • 谢谢。我使用 CRUP API 并注意到一个主要问题:我没有存储库的本地副本,这导致从它访问文件时等待时间很长。平台特定代码是什么意思?在 /tmp 中克隆/提交时,我是否需要考虑任何特殊情况?
【解决方案2】:

我决定使用亚马逊云来解决这个任务。 使用“aws-sdk”gem,可以轻松地将文件更改写入 S3 在线空间。

然后我使用我的 CIS 下载最新文件并将它们提交到存储库,这是一个简单的 ruby​​ 脚本:

require 'git'
require 'aws-sdk'
require 'fileutils'


folder_name = "configs"

begin
    g = Git.open(folder_name)
rescue
    puts "Cloning repo..."
    system("mkdir #{folder_name}")
    g = Git.clone("git@url...", folder_name, :path => ".")
end


g.config("user.name", "GitBot")
g.config("user.email", "...")
g.pull

FileUtils.rm_rf(Dir.glob("#{folder_name}/*"))

s3 = AWS::S3.new
bucket = s3.buckets["bucket name"] if not bucket


bucket.objects.each do |obj|
    if obj.content_length > 0
        # only files
        puts "Writing #{obj.key}"

        File.write("#{folder_name}/#{obj.key}", obj.read)
    else
        puts "Creating folder #{obj.key}"
        FileUtils.mkdir_p "#{folder_name}/#{obj.key}"
    end
end

begin
    g.add(:all => true)
    g.commit("Automatic commit from GitBot")
    g.push
    puts "Successfully pushed updates"
rescue
    puts "Nothing to commit"
end

这不是一个完美的解决方案,但非常适合我的用例。

【讨论】:

    猜你喜欢
    • 2021-11-29
    • 2014-07-10
    • 2013-11-06
    • 2018-03-02
    • 2012-03-30
    • 1970-01-01
    • 1970-01-01
    • 2021-05-12
    • 1970-01-01
    相关资源
    最近更新 更多