Integrazione Heroku e Github (come strutturare il progetto)
-
20-09-2019 - |
Domanda
Sto creando un servizio web e voglio archiviare il sorgente su github ed eseguire l'app su heroku.Finora non ho visto il mio scenario esatto affrontato da nessuna parte in rete, quindi lo chiederò qui:
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 quanto sopra, il progetto corrisponde a http://github.com/myuser/project, e my_rails_app è il codice che dovrebbe essere inviato a heroku.Ho bisogno di un ramo separato per l'app Rails o c'è un modo più semplice che mi manca?
Immagino che i miei file non-rails relativi al progetto potrebbero risiedere in my_rails_app, ma il README dei rail risiede già lì e sembra incoerente sovrascriverlo.Tuttavia, se lo lascio, la mia pagina github per l'app rails conterrà il file readme di rails, il che non ha senso.
Anche ...Ho provato a configurarlo come descritto sopra e ad eseguirlo
git push heroku
dalla cartella principale del progetto.Ovviamente, heroku non sa che voglio distribuire la sottocartella:
-----> Heroku receiving push
! Heroku push rejected, no Rails or Rack app detected.
Soluzione
Ecco una soluzione semplice che può o non può funzionare per voi.
-
Creare due progetti su GitHub. Un progetto dovrebbe essere solo l'applicazione Rails (vale a dire tutto all'interno della cartella app Rails). L'altro progetto dovrebbe essere tutto al di fuori della cartella app Rails.
-
Aggiungere il progetto applicazione Rails come git-modulo nell'ambito del progetto "contenitore".
-
Ora è possibile aggiungere Heroku come un telecomando sul app repository Rails separatamente e spingerlo a Heroku. Heroku accetterà la spinta, perché è solo un'applicazione Rails con le directory ei file attesi.
Altri suggerimenti
Una soluzione per la situazione Heroku (non il file README):
Se si sta utilizzando la nuova Heroku Cedar (credo che non era disponibile quando per la prima volta ha chiesto la tua domanda), allora i processi (come il processo del server rotaie) aVVIARE con Foreman . Così, è possibile inserire un Procfile
nella directory radice github 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
(notare il. All'inizio), che contiene
PORT=3000
Questo file viene letto da Foreman e utilizzato per impostare le variabili di ambiente in modo che la porta sia impostata quando si esegue foreman start
sulla vostra macchina (dalla directory root GitHub, dove il Procfile risiede). Il server di Heroku si prende cura del file .env sul banco prova. Il grande vantaggio è che si può impostare più processi al banco in questo modo!
Basta sovrascrivere il valore predefinito di Rails README
file.Non c'è motivo di tenerlo in giro.Metti gli altri tuoi contenuti relativi alla gestione del progetto nel file doc
directory.Sebbene tu abbia certamente valide ragioni per volerlo impostare come hai fatto, ti stai solo creando mal di testa andando contro le convenzioni, e probabilmente non ne vale la pena.
Vorrei aggiungere tutto sotto /my_rails_app
al repository git Heroku. Quindi aggiungere GitHub come un telecomando e aggiungere tutto sotto /project
al repository GitHub. Poi si può spingere l'applicazione Rails per Heroku (da /my_rails_app
) e spingere il progetto completo per GitHub (da /project
).