簡體   English   中英

Heroku(和類似的服務):克隆,提交和推送到Git Repository

[英]Heroku (and similar services): clone, commit and push to Git Repository

我希望我的Rails應用程序在訪問者在Web應用程序上輸入一些值后提交並推送git更改。 在開發過程中,我使用Ruby Gem來提交和推送更改,這會將存儲庫克隆到文件系統上。 更改將寫入這些文件,然后由Gem提交和推送。

Heroku僅提供只讀文件系統。

有沒有辦法

  • 提交和推送文件而不訪問文件系統?
  • 將存儲庫克隆到臨時文件夾並提交到那里?
  • 使用類似於Heroku的其他主機,允許寫入文件系統?

我是否忘記了在遠程git存儲庫上實現更改的任何明顯方法?

幾年前我做了類似事情 ,當時在heroku工作,今天仍然應該工作。

基本上:您實際上可以在/tmp使用文件系統。
因此,您必須在該存儲庫中克隆並在那里進行更改。

然而,雖然這在heroku上肯定是可能的,但是你最終會得到許多特定於平台的代碼,這可能會使heroku難以移出。
使用評論中建議的GitHub文件CRUP API似乎是一個更好的解決方案。

我決定使用亞馬遜雲來解決這個問題。 使用'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

它不是一個完美的解決方案,但對我的用例非常有用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM