GIt Deployment + Archivos de configuration + Heroku

Estoy usando Heroku para alojar una aplicación de Rails, lo que significa usar Git para implementar en Heroku. Debido al "flujo de trabajo de Git puro" en Heroku, todo lo que debe ir en sentido ascendente al server debe configurarse de manera idéntica en mi casilla local.

Sin embargo, necesito que ciertos files de configuration sean diferentes dependiendo de si estoy en la configuration local o si estoy implementado en Heroku. Nuevamente, debido al método de implementación que usa Heroku, no puedo usar .gitignore y una plantilla (como he visto sugerido muchas veces, y lo he usado en otros proyectos).

Lo que necesito es que git rastree de alguna manera los cambios en un file, pero selectivamente le digo a git que no anule ciertos files cuando saca de un repository particular, básicamente para hacer ciertos cambios en un solo sentido.

Se puede hacer esto? ¡Agradecería cualquier sugerencia!

¡Puede tener las configuraciones almacenadas persistentemente en la configuration local de cada aplicación heroku para que no tengan que estar en su código en absoluto! entonces el mismo código puede ejecutarse en múltiples sitios heroku pero con diferente configuration. Es muy simple, fácil, elegante …

Es el enfoque que utilizamos. (Lo usamos por el MISMO … tenemos múltiples clones de la MISMA aplicación en Heroku, pero solo queremos UNA fuente en github, en nuestro directory local de desarrollo hacemos la PULSACIÓN a ORIGEN (github), luego cuando tenemos de la manera que nos guste, hacemos CD en el directory local de prod, que va al MISMO repository de github, y SOLO EXTRAÍMOS de GITHUB a este directory, nunca lo presione (por ejemplo, todos los empujones a github provienen de nuestro directory de desarrollo, directory es solo un área de preparación para la otra aplicación heroku).

Al tener las diferentes configuraciones en los diferentes sitios HEROKU (como se explica a continuación), el MISMO CÓDIGO EXACTO funciona en AMBOS sitios heroku.

Por lo tanto, nuestro flujo de trabajo es: (la key es que AMBOS directorys apuntan a MISMO repository github)

cd myDEVdir *....develop away....* git add . git commit -am "another day, another push" git push origin *(to our SINGLE github repo)* git push heroku *(test it out on heroku #1)* cd ../myPRODdir git pull *(grabs SAME code as used on other site *) git push heroku *(now the SAME code runs on Heroku #2)* 

¡Eso es!

Ahora esta es la forma en que mantiene sus valores de configuration específicos del sitio EN el sitio heroku:

http://docs.heroku.com/config-vars

en su línea de command local, para CADA uno de sus dos directorys locales, haga:

 $ heroku config:add FIRST_CONFIGVAR=fooheroku1 Adding config vars: FIRST_CONFIGVAR => fooheroku1 $ heroku config:add SECOND_CONFIGVAR=barheroku1 Adding config vars: SECOND_CONFIGVAR => barheroku1 

para ver los que has definido:

 $ heroku config FIRST_CONFIGVAR => fooheroku1 SECOND_CONFIGVAR => barheroku1 

luego cd a su otro directory myPRODdir y haga lo MISMO, solo establezca los mismos vars Heroku remotos en fooheroku2 y barheroku2.

luego en tu aplicación de Rails, simplemente refiérete a ellos de la siguiente manera:

 a = ENV['FIRST_CONFIGVAR'] 

Una aplicación leerá 'fooheroku1' y la otra leerá 'fooheroku2'

Y finalmente, en su directory LOCAL myDEVdir, donde se ejecuta en modo DEV, coloque los mismos commands de configuration en su file config/environment/development.rb su versión 'dev' de los valores de configuration se establecerá en lo que sea que deberían ser:

 ENV['FIRST_CONFIGVAR'] = "foodev" ENV['SECOND_CONFIGVAR'] = "bardev" 

Fácil, elegante. Gracias, Heroku!

Aquí hay algunas soluciones:

1) Si quieres ignorar files solo en heroku, usa slugignore

2) Si sus cambios son menores, manténgase SECO y use files de configuration universales, insertando interruptores para el comportamiento específico del server

 if Rails.env == "production" #production server code elsif Rails.env == "development" #development server code else #test server code end 

3) Si sus cambios son importantes, escriba un file de configuration y agregue un "file de borrón" a config / initializers para cada server adicional. Básicamente, tendrías files separados usando la técnica en (2).

4) Si sus cambios son BARRANCOS (improbables), entonces mantenga twigs separadas para cada server.

5) Este script puede hacer exactamente lo que usted solicitó, pero puede ser exagerado.

Espero que haya ayudado.