2010-03-16 58 views
24

我正在創建一個web服務,我想將源文件存儲在github上並在heroku上運行應用程序。我還沒有看到我的確切的情況在任何地方解決的「淨爲止,所以在這裏我要問它:Heroku和Github集成(如何構建項目)

我想有以下目錄結構:

/project 
    .git 
    README <-- project readme file 
    TODO.otl <-- project outline 
    ... <-- other project-related stuff 
    /my_rails_app 
    app 
    config 
    ... 
    README <-- rails' readme file 

在上面,項目對應於http://github.com/myuser/project,my_rails_app是應該推送到heroku的代碼。我是否需要一個單獨的分支用於導軌應用程序,還是有一種更簡單的方法,我錯過了?

我猜我的項目相關的非rails文件可能存在於my_rails_app中,但是rails README已經存在於那裏,覆蓋它看起來不一致。但是,如果我離開它,我的rails應用程序的github頁面將包含rails自述文件,這沒有任何意義。

而且......我嘗試了從主項目文件夾設置它如上所述和運行

git push heroku 

。當然,Heroku的不知道我要部署的子文件夾:

-----> Heroku receiving push 
!  Heroku push rejected, no Rails or Rack app detected. 

回答

18

下面是一個簡單的解決方案,可能會或可能不適合你。

  • 在GitHub上創建兩個項目。一個項目應該只是Rails應用程序(即Rails應用程序目錄中的所有內容)。另一個項目應該是Rails應用程序目錄之外的所有內容。

  • 將Rails應用程序項目添加爲「容器」項目內的git子模塊。

  • 現在,您可以將Heroku作爲遠程設備分別添加到Rails應用程序庫中,並將其推送到heroku。 Heroku將接受推送,因爲它只是一個帶有預期目錄和文件的Rails應用程序。

+0

這工作,謝謝。 – g33kz0r 2010-03-16 14:56:55

0

我想下面/my_rails_app添加一切Heroku的git倉庫。然後將GitHub添加爲遠程並將/project下的所有內容添加到GitHub存儲庫。然後,您可以將Rails應用程序推送到Heroku(從/my_rails_app),並將完整項目推送到GitHub(從/project)。

+0

你基本上是說創建兩個回購,對吧?一個在另一個裏面?雖然好。但是,我已經嘗試過了,它不起作用:)。 Github的問題在於:不是將my_rails_app顯示爲普通的受版本控制的文件夾,而是顯示爲git提交引用的鏈接(本例中爲my_rails_app git repo的提交id的前幾個字符)。所以基本上這樣做使得github的web視圖對於所有的意圖和目的都沒有用處。 – g33kz0r 2010-03-16 13:56:11

+0

因爲Heroku需要它自己,所以你必須有兩個回購。我已經用Heroku和GitHub成功完成了這個任務,但沒有這樣嵌套。看起來正義可能有一個很好的答案。 – 2010-03-16 14:00:13

4

只是覆蓋Rails的默認README文件。沒有理由保留它。把你的其他項目管理相關的東西放在doc目錄中。雖然你肯定有正當的理由想要按照你的方式來設置它,但你違背慣例就會讓自己頭疼,這可能不值得。

6

一種Heroku的情況(不README文件)的解決方案:

如果您正在使用新的Heroku Cedar(我相信這是不可用,當你第一次問你的問題),那麼你的流程(如導軌服務器進程)使用Foreman啓動。因此,你可以在像這樣的根GitHub的目錄放置一個Procfile

web:  my_rails_app/script/runserver.sh 

然後my_rails_app/script/runserver.sh可能是一個簡單的

#!/bin/sh 

cd my_rails_app 
bundle exec rails server -p $PORT 

本地,您還應該創建一個名爲.env(注在開頭),其中包含

PORT=3000 

該文件由工頭讀取並用於設置環境變量,以便當你在你的機器上執行foreman start(從根目錄github,Procfile所在的位置)時,該端口被設置。 Heroku服務器負責維護您的dyno上的.env文件。最大的好處是你可以用這種方式在測功機上設置多個進程!