Posty

Wyświetlanie postów z kwiecień, 2017

Heroku: Lesson learned

Podczas moich kilkudniowych zmagań z postawieniem aplikacji na Heroku były komendy i zaklęcia, których używałam częściej, niż innych. Były też przekleństwa, których używałam równie często, ale to nie czas i miejsce na taki post. Napotkałam też kilka problemów, które wymagały mniej lub więcej googlowania. Na przykład: app[web.1]: Exception in thread "main" com.typesafe.config.ConfigException$Missing: No configuration setting found for key 'youtube' Rozwiązaniem jest dodanie zmiennej środowiskowej. Można to wyklikać w Heroku, ale najprostsze rozwiązanie to: $ heroku config:set youtube.apiKey="xyz" # dla jednej z kilku aplikacji, będzie analogicznie heroku config:set youtube.apiKey="xyz" --remote speech-rank-api Innym problelem, który napotlałam na początku był brak dyno'sów, objawiający się takimi oto błędami: heroku[router]: at=error code=H14 desc="No web processes running" method=GET path="/favicon.ico" host=sp

Ola:Heroku 1:1 - wprowadzka do Heroku cz. 3

Trochę się nagimnastykowałam, próbując różnych rozwiązań, żeby uruchomić równocześnie Gradle i NodeJS na tej samej platformie. Niestety w darmowej wersji Heroku jest to niewykonalne. Każdy z tych wątków musi być uruchomiony na dyno typu web , żeby posiadał adres inny, niż localhost. Postanowiłam stworzyć dwie aplikacje na Heroku, speech-rank i speech-rank-api . Składnia jest dość toporna, bo przy tworzeniu wielu aplikacji dla tego samego repo trzeba  $ heroku create --remote speech-rank-api speech-rank-api pierwsze speech-rank-api odwołuje się do nazwy roboczej, której będziemy używać w konsoli, drugie do nazwy aplikacji na Heroku.  Zmieniłam też sposób uruchamiania aplikacji na Express , żeby łatwiej było ładować statyczny kontent i mój index.js wygląda następująco: var express = require('express') const path = require('path'); var app = express() app.set('port', (process.env.PORT || 80)) app.use(express.static(path.join('.', 'build

Historia z pola bitwy - wprowadzka do Heroku cz. 2

Słowa na dziś: dyno i buildpack . Walka z Heroku trwa, deployowanie aplikacji w kilku technologiach jest dość skomplikowane, albo wielkanocne babki uruchomiły już bombę insulinową... Zaczęłam trochę od końca, bo najpierw ustawiłam buildpacki  $ heroku buildpacks:set heroku/nodejs $ heroku buildpacks:add --index 1 heroku/gradle Później zorientowałam się, że potrzebuję coś, co nazywa się Procfile  (nie mylić z   procfile , Procfile.txt , albo Procfile.conf ). Tam należy określić, jakie komendy mają być wywołane, żeby stworzyć dynos . Dyno to linuxowy kontener, który wywołuje pojedynczą komendę, taka zakładka terminala.  Ja określiłam najpierw buildpacki. Pięknie wykonywał mi się build, najpierw gradle, później node na podstawie skryptów z package.json "scripts": { "local-web-server": "ws -d build/web", "gulp": "gulp", "build": "gulp", "start": "npm install", "postin

Aplikacjo, wo wohnst du? Wprowadzka na Heroku cz. 1

Postanowiłam dodać logowanie do SpeechRank za pomocą Twittera. Do tego potrzebna jest implementacja OAuth, która wymaga własnego kawałka miejsca w internecie. Można tego dokonać z poziomu localhost'a, ale skoro już rzucam się na głęboką wodę i jest to dla mnie czas nauki, postanowiłam, że miejscem dla mojej aplikacji będzie Heroku . Kiedyś postawiłam tam projekt w Railsach, ale jeszcze nigdy nie budowałam tam gradlowo-nodowej aplikacji.  Heroku jest platformą, która pozwala na budowanie i deploy'owanie aplikacji w chmurze. Można ją skonfigurować, żeby współpracowała z Travisem, o którym pisałam niedawno . Heroku trzeba zainstalować, na przykład za pomocą brew , a potem stworzyć projekt, ja wpisałam w ścieżce do mojej aplikacji $ heroku create speech-rank $ git push heroku master Zauważ, że wskazujesz, jaki branch ma być deployowany. Czyż to nie cudowne, że mogę to modyfikować i wrzucać feature branch'e, żeby je tam przetestować? Zwłaszcza, kiedy testowanie wymaga ki

Pokaż mi kod z produkcji, a powiem ci... że się niczego nie boisz

Odkąd rozwijam aplikację SpeechRank  do oglądania wystąpień z konferencji, inaczej patrzę na prelekcje. Akurat trwa  Scalar , podczas którego nagrywani prelegenci  uczą i  bawią  publiczność monadami, makrami, typeclass'ami i innymi czeluściami języka. Tyle, że wszystkie te elementy (jak kiedyś wspominał Michał Płachta ) wchodzą w skład złożoności przypadkowej. Natomiast złożoności właściwej, mającej związek z problemami natury biznesowej w wystąpieniach jest jak na lekarstwo. Historie z bitew i wojen wygranych na produkcji po krwawych starciach z kompilatorem, bibliotekami, lambdami, aktorami i Future' ami są raczej w mniejszości.  Myślałam przez chwilę, że może ta społeczność gardzi kodem produkcyjnym, uznając za punk honoru pull requesty do Akki . Albo, że to przez fakt związania Scalara z jedną technologią. Ale jak sięgam do wspomnień z innych konferencji, to wszędzie jest podobnie. Co ciekawe, najchętniej oglądamy wystąpienia z praktycznymi wskazówkami, płynącymi z boga

Karotkowe Wyzwanie Technologiczne - dodam OAuth2.0 do mojej aplikacji

Mamy kwiecień i coraz trudniej jest stać przy komputerze, kiedy na zewnątrz słońce i wybuchająca wiosna... Postanowiłam więc określić cel na ten miesiąc, takie minimum, które muszę osiągnąć, żeby mieć poczucie postępu. Takim elementem, który jest kluczowy dla aplikacji Speech Rank , a jeszcze nie został dotknięty, jest autoryzacja. Użytkownicy mają mieć możliwość logowania za pomocą Twittera, ewentualnie GitHuba, więc potrzebny będzie standart OAuth2.0. Miałam go już w kilku projektach, ale nigdy nie pisałam go własnoręcznie, więc to chyba dobre wyzwanie. Dlaczego akurat Twitter? Celem aplikacji jest nie tylko oglądanie filmików, ale przede wszystkim inspirowanie się tym, co oglądają inni. Na Twitterze obserwujemy zazwyczaj swoich mentorów, swoje autorytety i inżynierów ze swojej lokalnej społeczności. Jestem przekonana, że odkrywanie wystąpień, które zostały wysoko ocenione przez te osoby byłoby cenną wiedzą i wielką oszczędnością czasu.  Tak się świetnie złożyło, że startuje Karo