Skip to content

Sätta upp en lokal testmiljö

Albert Vesterlund edited this page Jun 18, 2020 · 8 revisions

Installera

  • Rubyinstaller - Jag använde 2.6.6 på Windows
  • PostgreSQL - alla nyare versioner borde fungera
  • Node.js - behövs för vissa gems ska fungera (lokalt?)

Om du använder en annan version av Ruby än 2.5.3 (som är nuvarande versionen i prod) kommer du behöva ändra några filer lite senare.

När du sätter upp PostgreSQL se till att SPARA LÖSENORDET DU ANGER. Du kommer behöva det senare.

Se till att ha git installerat

Git

Troligvis har du redan git men annars måste det installeras då ett gem som är specificerat i Gemfile klonar ett GitHub repo.

Om du jobbar på windows se till att Ruby, PostgreSQL samt Node ligger på PATH. Annars kommer vissa kommandon inte fungera.

Varför inte Ruby 2.5.3?

Anledningen till att jag använde Ruby 2.6.6 är mest för att 2.5.3 som körs i Prod inte har kunnat installera rails vilket gör det svårt att jobba med. Om du lyckas installera Ruby 2.5.3 och sedan köra gem install rails -v 5.2 utan problem kan nog många av stegen skippas, i teorin borde det räcka att köra setupfilen efter att ha gjort ändringarna som nämns i den sektionen. Har själv inte kunnat testa detta men troligen skulle det fungera utan de mesta av ändringarna som krävs p.g.a. nyare versioner av alla gems.

Installera Rails och bundler

Kör gem install rails -v 5.2. Detta installerar den version av rails som används i prod.

Kör sedan gem install bundler --conservative.

Klona repot

Använd godtyckligt sätt för att klona repot https://github.com/Fysikteknologsektionen/sektionsmote till någon lättåtkomlig plats.

Från och med nu så vill du jobba i mappen som du klonade.

Om du använder Ruby 2.6 eller senare

Kontrollera din version med ruby -v Här kommer några ändringar jag har behövt göra för att göra allting kompatibelt med Ruby 2.6.6. Det är möjligt att vissa av dessa ändringar behövs även för 2.5.3 och att vissa skulle kunna skippas men för stunden så funkar detta.

Se till att det står angivet rätt version av Ruby i filer

Om du har en annan version av Ruby än 2.5.3 måste du ändra i några filer för att kunna köra servern.

  • Ändra i .ruby-version så det står rätt version, bara nummren.
  • Ändra i Gemfile ruby '2.5.3' till din version av ruby.
  • Ändra i .circleci/config.ymltill din version av ruby.

Många plugins använder gamla versioner

Därför måste man explicit specificera att man ska installera de äldre versionerna då några få nya versioner har ändrat om saker som gör att det inte längre fungerar på det gamla sättet. Allt som behövs ändras i Gemfile är att specificera vilka versioner du vill använda. Det jag har ändrat för att få det att fungera med Ruby 2.6.6 är:

  • gem 'pg', '~> 1.2.3' detta då du annars kommer installera en version av pg som inte stödjs av Ruby 2.6.x eller högre. (pg är det gem som jobbar med PostgreSQL databasen, viktigt att det fungerar)
  • gem 'sass-rails', '~> 5.0.7'

En bra gem att ha för viss databasrelaterad-debugging kan vara

  • gem 'tzinfo-data'

Ta sedan bort filen Gemfile.lock och kör sedan bundle install för att installera alla gems och generera en ny Gemfile.lock.

Lägg till {} runt saker

I mappen spec/factories finns det massa olika mallar för databasstrukturen. I dessa finns det några defaultvärden som anges, detta måste ändras och lägga till {} runt p.g.a. en ny version av något gem (Inte hittat vilket ännu).

adjustments.rb ändra till

  • presence { true }

users.rb ändra till

  • password {'12345678'}
  • role {:user}
  • role {:admin}
  • confirmed_at {nil}
  • confirmation_token {'confirmmyaccount'}
  • reset_password_token {'resetmypassword'}

vote_options.rb ändra till

  • count {0}

votes.rb ändra till

  • status {:future}
  • choices {1}

Lägg till en fil

Så av någon anledning kommer det behövas en fil app/assets/images/favicon/manifest.json. Denna kan vara helt tom och spelar ingen roll för webbsidans funktionalitet men den måste existera annars startar inte sidan. Gör bara en tom fil och placera den där.

Ändringar för lokal testmiljö (Alla versioner av Ruby)

Nedan är de ändringar som krävs för att kunna köra webbsidan lokalt istället för på prod.

Lägg till lokal databas

Det finns en fil config/database.yml i den, under default, ändra så den får detta utseende:

    default: &default
        adapter: postgresql
        encoding: unicode
        host: localhost #Om databasen är lokalt hostad
        username: [USERNAME]
        password: [PASSWORD]
        pool: 5

Användarnamnet och lösenordet är de till din databas. Använder du din lokala installation av PostgreSQL borde användarnamnet vara postgres och lösenordet det du angav vid installationen.

Ändra testmailaddresser

Eftersom testerna förmodligen gjordes innan begränsningen till chalmersmailer infördes måste det ändras. I filen lib/tasks/dev_data.rake ändra mailaddresserna så de slutar i antingen @student.chalmers.se eller @chalmers.se. Inga mail kommer skickas dit så det spelar ingen roll vad som skrivs in.

Ändra väg till rails

Lite beroende på hur rails är installerat på just din dator kan detta steget variera lite. Kolla upp om rails ligger i PATH eller i PATH/bin. Rails kommer ligga i samma mapp som din Ruby installation så om du satte din PATH direkt till ruby borde du ändra lite i filen bin/setup.rb. Ändra i så fall alla bin/rails till bara rails

Är du osäker på detta steget skriv rails -v i konsolen. Fungerar kommandot gör du ändringen.

Nu borde sidan kunna startas!

Om allting har gått rätt så borde du nu kunna köra rails server från mappen sektionsmote (eller någonstans i den) och servern borde startas! Du kan då hitta den på localhost:3000 i din webbläsare. Notera att du ännu inte kan skicka mail, det måste man konfigurera lite extra.

Konfigurera mail för testning

Det finns två sätt att testa mail egentligen, om du vill testa att bara mail fungerar och om du vill testa att skicka mail från rätt address. Om du bara vill testa att det fungerar att skicka mail behöver du bara installera ett extra gem.

Testa att skicka mail

För att testa och skicka mail används Mailcatcher vilket är ett gem som fångar upp utgående mail på en ip med en viss port. Följ instruktionerna på webbsidan för att sätta upp det och sätt inte mailcatcher i Gemfile då det kan störa andra gems. Steg 1-3 visar vad du ska göra, steg 4 görs redan. Testa sedan att skapa ett konto, mailcatcher borde fånga upp bekräftelsemailet.

Testa att skicka ett "riktigt" mail

Kopiera koden längst ner från filen config/environments/production.db till config/environments/development.db (kopiera rad 97 till 115 och ersätt raderna 68 till 72) och byt ut ENV['APPLICATION_URL] mot localhost:3000 samt ENV['FTEK_USERNAME'] och ENV['FTEK_PASSWORD'] mot den email du vill skicka från och dess lösenord. För att detta ska fungera måste "Allow less secure apps" vara påslaget i googlekontots inställningar. Var försiktig med hanteringen av lösenord här.

Allt borde fungera!

Nu borde allting fungera, vissa saker kanske ser lite annorlunda ut beroende på vilken version av Ruby du använder eller vilket operativsystem du kör.

Värt att notera

Eftersom man förmodligen någon gång under sin setup tar bort filen Gemfile.lock som låser versionen av alla gems till den som är i prod kommer din lokala installtion förmodligen använda sig av nyare gems än de som används i prod. Detta är nog varför man måste göra dessa lite olika småändringarna på olika ställen för att få servern att fungera.

WIP

Jag ska se om man kan installera samma version av alla gems som används på ett bra sätt, går ganska lätt att bara tvinga alla gems att vara en version i Gemfile men går nog att göra det på ett lite lättare sätt.