Znowu chmura i java 😀
Standardowo trzeba założyć konto, tym razem na heroku.com. Można mieć do 5 darmowych apek a potem trzeba dać się zweryfikować przez podanie detali karty kredytowej – co się wtedy dzieje – nie wiem – ale na pewno jest w regulaminie zakaz tworzenia zsynchronizowanego tworu łączącego darmowe instancje w jedną zmutowaną apke 😀
Potem trzeba zainstalować konsolowego toola na kompie https://toolbelt.heroku.com/
Dla leniwych jest mega prosty projekt z prymitywnym gui którego bebechy można wrzucić do folderu z apką heroku https://github.com/AdupTeam/cloudcalc i spokojnie można przejść do części o push’owaniu 🙂
Tworzę apkę na heroku
$ heroku apps:create hello-world ! Name is already taken
UPS! nazwa musi być unikalna – apka będzie widoczna pod domeną: mojanazwa.herokuapp.com
$ heroku apps:create chmura Creating chmura... done, stack is cedar http://chmura.herokuapp.com/ | git@heroku.com:chmura.git
W odpowiedzi jest adres pod jakim znajdzie się apka i link do repo
Klonowanie pustego repo apki
$ git clone git@heroku.com:chmura.git Cloning into 'chmura'... warning: You appear to have cloned an empty repository. UserX@X-PC ~/HerokuTest $ cd chmura/ UserX@X-PC ~/HerokuTest/chmura (master) $ ls -a . .. .git
Domyślnie projekt powinien być w java 1.6 bo
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:2.3.2:compile (default-compile) on project jbehave: Compilation failure [ERROR] Failure executing javac, but could not parse the error: [ERROR] javac: invalid target release: 1.7
Do pliku maven’owego pom.xml należy dodać plugin web runner
<build> ... <plugins> ... <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-dependency-plugin</artifactId> <version>2.3</version> <executions> <execution> <phase>package</phase> <goals><goal>copy</goal></goals> <configuration> <artifactItems> <artifactItem> <groupId>com.github.jsimone</groupId> <artifactId>webapp-runner</artifactId> <version>7.0.40.0</version> <destFileName>webapp-runner.jar</destFileName> </artifactItem> </artifactItems> </configuration> </execution> </executions> </plugin> </plugins> </build>
Tworzę plik Procfile (bez rozszerzenia, w najwyższej lokacji repo) z zawartością:
web: java $JAVA_OPTS -jar target/dependency/webapp-runner.jar --port $PORT target/*.war
Czas kodzenia apki… Gdy mamy kod wystarczy zacommitować i ….
Czas pusznąć naszą ape na repo heroku oł je 😛
git push origin master
Powinno wyjść coś takiego
[INFO] BUILD SUCCESS [INFO] ------------------------------------------------------------------------ [INFO] Total time: 8.940s [INFO] Finished at: Sun Nov 03 15:41:57 UTC 2013 [INFO] Final Memory: 20M/490M [INFO] ------------------------------------------------------------------------ -----> Discovering process types Procfile declares types -> web -----> Compiled slug size: 61.4MB -----> Launching... done, v8 http://chmura.herokuapp.com deployed to Heroku To git@heroku.com:chmura.git ae24ff2..f2e61e3 master -> master
A potem uruchomić dziada
UserX@X-PC ~/HerokuTest/chmura (master) $ heroku ps:scale web=1 Scaling web dynos... done, now running 1
Gdyby działo się coś takiego
$ heroku ps:scale web=0 Scaling web dynos... failed ! Resource not found
prawdopodobnie jest coś nie tak z konfiguracją web-runner’a albo Procfile’a
Gdy już sie wszystko uda można klepnąć w konsolce
heroku run bash
No i sie porozglądać po DYNO czyli maszynce na jakiej siedzi apka
Podgląd tego co się dzieje z naszym heroku
heroku logs -t
A zapomniałbym – można zobaczyć aplikację śmigającą w necie 🙂
heroku open
A potem usuwanko aby zrobić miejsce 🙂
UserX@X-PC ~/HerokuTest/cloudcalc (master) $ heroku apps:create cloudcalc ! You've reached the limit of 5 apps for unverified accounts. ! Add a credit card to verify your account. UserX@X-PC ~/HerokuTest/cloudcalc (master) $ heroku apps:destroy chmura ! WARNING: Potentially Destructive Action ! This command will destroy chmura (including all add-ons). ! To proceed, type "chmura" or re-run this command with --confirm chmura > chmura Destroying chmura (including all add-ons)... done
Jeszcze można pobawić się tak:
Wersja pro – tworzymy heroku apke w isniejącym repo naszej apki na kompie
UserX@X-PC ~/HerokuTest/cloudcalc (master) $ heroku apps:create cloudcalc Creating cloudcalc... done, stack is cedar http://cloudcalc.herokuapp.com/ | git@heroku.com:cloudcalc.git Git remote heroku added
Czyli teraz można puszować do dwóch repo – nice 🙂
UserX@X-PC ~/HerokuTest/cloudcalc (master) $ git remote -v heroku git@heroku.com:cloudcalc.git (fetch) heroku git@heroku.com:cloudcalc.git (push) origin https://github.com/AdupTeam/cloudcalc.git (fetch) origin https://github.com/AdupTeam/cloudcalc.git (push)
No to na co czekać 😀
UserX@X-PC ~/HerokuTest/cloudcalc (master) $ git push heroku master Counting objects: 26, done. Delta compression using up to 3 threads. Compressing objects: 100% (15/15), done. Writing objects: 100% (26/26), 3.05 KiB, done.
git push każdy zna, heroku to nazwa repo, master to nasz branch który push’ujemy, opcjonalnie :master to zewnętrzny branch.
Warto pamiętać, że proces budowania jest odpalany tylko po push na branch master na repo heroku – inne gałęzie są ignorowane.
$ git push heroku mojbranch
Da
local mojbranch -> remote mojbranch
Przy polityce git, domyślnie tworzącego branch o nazwie tego z którego robimy push na repo zewnętrznym, powoduje brak budowania się apki. Wniosek – warto przyzwyczaić się do dodawania push heroku mojbranch:master gdy robimy push lokalnej gałęzi bo potem jest wielkie zdziwko czemu się nie buduje 😀
Idąc dalej można stworzyć dwie apki na heroku i podpiąc je pod repo oznaczając jako staging i production. Potem robić push do danego repo zewnętrznego – więcej o tym poczytasz na https://devcenter.heroku.com/articles/multiple-environments#advanced-linking-local-branches-to-remote-apps
Czasami się zdarza tak, że ostatni commit repo naszej apki, które chcemy push’nąć na świeżutkie repo heroku ma datę wcześniejszą niż commit inicjalizujący repo na heroku.
W logach pojawia się
pre-recive hook declined
, no i apka sie nie buduje. Rozwiązaniem jest zrobienie push z opcją
git push --force heroku mojbranch:master
co spowoduje nadpisanie naszym repo tego z heroku 🙂
Warto jeszcze dodać, że można podpiąć własną domenę pod apkę w chmurze.
W następnej części opisze proces dodania bazy do apki na heroku link TODO.