2010-03-16 12 views
24

Sto creando un webservice e voglio memorizzare il sorgente su github ed eseguire l'app su heroku. Non ho visto il mio scenario esatto indirizzato ovunque 'sulla rete fino ad ora, quindi mi chiedere qui:Integrazione di Heroku e Github (come strutturare il progetto)

voglio avere la seguente struttura di directory:

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

In precedenza, il progetto corrisponde a http://github.com/myuser/project e my_rails_app è il codice che deve essere inviato a heroku. Ho bisogno di un ramo separato per l'app per i binari, o c'è un modo più semplice che mi manca?

Immagino che i miei file non-rail relativi al progetto possano vivere in my_rails_app, ma il file README delle rotaie già vive lì e sembra incoerente sovrascriverlo. Tuttavia, se lo lascio, la mia pagina github per l'app rails conterrà il readme delle rotaie, il che non ha senso.

anche ... ho provato solo la sua creazione come descritto sopra e in esecuzione

git push heroku 

dalla cartella principale del progetto. Naturalmente, Heroku non sa che voglio distribuire il sottocartella:

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

risposta

18

Ecco una soluzione semplice che può o non può funzionare per voi.

  • Creare due progetti su GitHub. Un progetto dovrebbe essere solo l'app Rails (vale a dire tutto all'interno della directory dell'app Rails). L'altro progetto dovrebbe essere tutto al di fuori della directory dell'app Rails.

  • Aggiungi il progetto dell'app Rails come sottomodulo git all'interno del progetto "contenitore".

  • Ora è possibile aggiungere Heroku come remoto sul repository dell'app Rails separatamente e trasferirlo su heroku. Heroku accetterà la spinta perché è solo un'app Rails con le directory e i file previsti.

+0

Questo ha funzionato, grazie. – g33kz0r

0

vorrei aggiungere tutto sotto /my_rails_app al repository git Heroku. Quindi aggiungi GitHub come telecomando e aggiungi tutto sotto /project al repository GitHub. Quindi puoi spingere l'applicazione Rails a Heroku (da /my_rails_app) e inviare il progetto completo a GitHub (da /project).

+0

In pratica stai dicendo di creare due repository, giusto? Uno dentro l'altro? Un buon pensiero Comunque, l'ho già provato, e non funziona :). Github è il problema: piuttosto che visualizzare my_rails_app come una normale cartella controllata dalla versione, viene visualizzato come collegamento a un riferimento di commit git (in questo caso i primi caratteri dell'ID commit del repo git my_rails_app). Quindi, in pratica, ciò rende la visualizzazione Web di github inutile a tutti gli effetti. – g33kz0r

+0

Dovrai avere due repository perché Heroku ne ha bisogno. L'ho fatto con successo con Heroku e GitHub, ma non sono nidificato in questo modo. Sembra che la giustizia abbia una buona risposta. –

4

Basta sovrascrivere il file README predefinito di Rails. Non c'è motivo di tenerlo in giro. Metti le altre cose relative alla gestione del progetto nella directory doc. Sebbene tu abbia certamente validi motivi per voler impostare come hai fatto, stai solo creando un mal di testa andando contro le convenzioni, e probabilmente non ne vale la pena.

6

Una soluzione per la situazione Heroku (non il file README):

Se stai usando le nuove Heroku Cedar (credo che non era disponibile quando hai chiesto prima la tua domanda) allora i processi (come la processo del server delle guide) avviare utilizzando Foreman.Così, è possibile inserire un Procfile nella directory github radice che assomiglia a questo:

web:  my_rails_app/script/runserver.sh 

E poi my_rails_app/script/runserver.sh potrebbe essere un semplice

#!/bin/sh 

cd my_rails_app 
bundle exec rails server -p $PORT 

A livello locale, si dovrebbe anche creare un file chiamato .env (nota all'inizio.), che contiene

PORT=3000 

Questo file viene letto dal caposquadra e utilizzato per impostare le variabili di ambiente in modo che la porta viene impostata quando si esegue foreman start sulla propria macchina (dalla directory root github, dove giace Procfile). Il server Heroku si occupa del file .env sul tuo banco prova. Il grande vantaggio è che puoi impostare più processi sul banco prova in quel modo!

Problemi correlati