Compare commits

5 Commits
Author SHA1 Message Date
fridoandClaude Opus 5.5 4c9871c8d7 Posploši CLAUDE.md za predlogo in dodaj pravila za Git
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-27 14:17:46 +01:00
fridoandClaude Opus 5.5 e2682273ac Posodobi navodila za Gitea predlogo, povezavo z bazo in web-console
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-27 14:17:46 +01:00
fridoandClaude Opus 5.5 6081cb247c Priklopi pgdata za PostgreSQL 18, dodaj healthcheck in db:prepare ob zagonu
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-27 14:17:46 +01:00
fridoandClaude Opus 5.5 4ae5a25766 Dodaj podporo za Gitea predlogo z zamenjavo imena baze
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-27 14:17:46 +01:00
fridoandClaude Opus 5.5 eaf82e05c0 Dopolni .gitignore in .dockerignore z vrsticami, ki jih doda Rails
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-27 14:17:46 +01:00
7 changed files with 106 additions and 25 deletions
+12
View File
@@ -2,6 +2,10 @@
.git .git
.gitignore .gitignore
# Nastavitve Bundlerja in lokalno nameščeni gemi
.bundle
vendor/bundle
# Okoljske spremenljivke in skrivnosti # Okoljske spremenljivke in skrivnosti
.env .env
.env.* .env.*
@@ -16,6 +20,14 @@ storage/*
public/assets public/assets
node_modules node_modules
# Poročila testov in orodij
coverage
# Urejevalniki in sistem
.vscode
.idea
.DS_Store
# Docker # Docker
Dockerfile Dockerfile
docker-compose.yml docker-compose.yml
+1 -1
View File
@@ -3,7 +3,7 @@
# Glavna različica PostgreSQL za strežnik in klient v kontejnerju app # Glavna različica PostgreSQL za strežnik in klient v kontejnerju app
PG_MAJOR=18 PG_MAJOR=18
APP_DATABASE=poslovni_imenik_development APP_DATABASE=${REPO_NAME_SNAKE}_development
APP_DATABASE_HOST=db APP_DATABASE_HOST=db
APP_DATABASE_PORT=5432 APP_DATABASE_PORT=5432
APP_DATABASE_USERNAME=postgres APP_DATABASE_USERNAME=postgres
+3
View File
@@ -0,0 +1,3 @@
# Datoteke, v katerih Gitea ob ustvarjanju repozitorija iz predloge
# zamenja spremenljivke (npr. ${REPO_NAME_SNAKE}) z imenom novega repozitorija
.env.example
+16 -3
View File
@@ -1,21 +1,31 @@
# Več o ignoriranju datotek: https://help.github.com/articles/ignoring-files
# Nastavitve Bundlerja in lokalno nameščeni gemi
/.bundle
/vendor/bundle
# Okoljske spremenljivke in skrivnosti # Okoljske spremenljivke in skrivnosti
.env .env
.env.* .env.*
!.env.example !.env.example
/config/master.key /config/*.key
/config/credentials/*.key /config/credentials/*.key
# Dnevniki in začasne datoteke # Dnevniki in začasne datoteke (mape ohranimo)
/log/* /log/*
/tmp/* /tmp/*
!/log/.keep !/log/.keep
!/tmp/.keep !/tmp/.keep
/tmp/pids/* /tmp/pids/*
!/tmp/pids/
!/tmp/pids/.keep !/tmp/pids/.keep
# Naložene datoteke (Active Storage) # Naložene datoteke (Active Storage) in SQLite baze
/storage/* /storage/*
!/storage/.keep !/storage/.keep
/tmp/storage/*
!/tmp/storage/
!/tmp/storage/.keep
# Prevedena sredstva # Prevedena sredstva
/public/assets /public/assets
@@ -23,6 +33,9 @@
!/app/assets/builds/.keep !/app/assets/builds/.keep
/node_modules /node_modules
# Poročila testov in orodij
/coverage
# Urejevalniki in sistem # Urejevalniki in sistem
.vscode/ .vscode/
.idea/ .idea/
+9 -1
View File
@@ -1,4 +1,4 @@
# Poslovni imenik # Ime projekta
## Jezik ## Jezik
@@ -9,3 +9,11 @@
## Izrazoslovje ## Izrazoslovje
- Za Docker container uporabljaj izraz **kontejner** (kontejnerja, kontejnerju ...), ne prevoda "vsebnik". - Za Docker container uporabljaj izraz **kontejner** (kontejnerja, kontejnerju ...), ne prevoda "vsebnik".
## Git
- Veje:
- `main` – stabilna veja.
- `dev` – razvojna veja, kamor gre tekoče delo.
- Commiti naj bodo manjši in združeni po logičnih funkcionalnostih (en commit = ena zaokrožena sprememba).
- Sporočila commitov so v **slovenskem jeziku**.
+56 -17
View File
@@ -19,6 +19,7 @@ Predloga za razvojno okolje Ruby on Rails v Dockerju. Vsebuje samo infrastruktur
| `Dockerfile` | slika za razvoj: Ruby, sistemske knjižnice (`build-essential`, `git`, `libpq-dev`, `libyaml-dev`, `pkg-config`, `postgresql-client-18`), repozitorij PGDG, uporabnik `app` (UID 1000) | | `Dockerfile` | slika za razvoj: Ruby, sistemske knjižnice (`build-essential`, `git`, `libpq-dev`, `libyaml-dev`, `pkg-config`, `postgresql-client-18`), repozitorij PGDG, uporabnik `app` (UID 1000) |
| `docker-compose.yml` | servis `app` (Rails na vratih 3000) in servis `db` (PostgreSQL) ter volumna `bundle` in `pgdata` | | `docker-compose.yml` | servis `app` (Rails na vratih 3000) in servis `db` (PostgreSQL) ter volumna `bundle` in `pgdata` |
| `.env.example` | predloga okoljskih spremenljivk (različica PostgreSQL in dostop do baze); kopiraš jo v `.env` | | `.env.example` | predloga okoljskih spremenljivk (različica PostgreSQL in dostop do baze); kopiraš jo v `.env` |
| `.gitea/template` | seznam datotek, v katerih Gitea ob ustvarjanju repozitorija iz predloge zamenja spremenljivke z imenom repozitorija |
| `.dockerignore` | v sliko ne kopira skrivnosti, `.git`, dnevnikov in začasnih datotek | | `.dockerignore` | v sliko ne kopira skrivnosti, `.git`, dnevnikov in začasnih datotek |
| `.gitignore` | v Git ne shrani `.env`, ključev za credentials, dnevnikov ipd. | | `.gitignore` | v Git ne shrani `.env`, ključev za credentials, dnevnikov ipd. |
@@ -35,25 +36,39 @@ Predloga za razvojno okolje Ruby on Rails v Dockerju. Vsebuje samo infrastruktur
- **`BUNDLE_PATH` namenoma ni nastavljen.** Z njim bi `bundle install` geme nameščal v drugo mapo kot `gem install`, izvršljive datoteke (`rails`, `rake`) pa ne bi bile v `PATH`. - **`BUNDLE_PATH` namenoma ni nastavljen.** Z njim bi `bundle install` geme nameščal v drugo mapo kot `gem install`, izvršljive datoteke (`rails`, `rake`) pa ne bi bile v `PATH`.
- **Kontejner teče kot uporabnik `app` (UID 1000)**, zato so datoteke, ki jih ustvari (npr. `rails new`, migracije), na računalniku v lasti tvojega uporabnika. Če ima tvoj uporabnik drug UID (preveri z `id -u`), ga spremeni v `Dockerfile` in v `docker-compose.yml` (`user:`). - **Kontejner teče kot uporabnik `app` (UID 1000)**, zato so datoteke, ki jih ustvari (npr. `rails new`, migracije), na računalniku v lasti tvojega uporabnika. Če ima tvoj uporabnik drug UID (preveri z `id -u`), ga spremeni v `Dockerfile` in v `docker-compose.yml` (`user:`).
- **Koda je priklopljena z `.:/app`**, zato se spremembe takoj vidijo v kontejnerju, brez ponovne gradnje slike. - **Koda je priklopljena z `.:/app`**, zato se spremembe takoj vidijo v kontejnerju, brez ponovne gradnje slike.
- **Podatke baze hrani volume `pgdata`**, zato ostanejo tudi po `docker compose down`. - **Podatke baze hrani volume `pgdata`**, zato ostanejo tudi po `docker compose down`. Priklopljen je na `/var/lib/postgresql` (ne na `/var/lib/postgresql/data`), kot zahteva slika `postgres` od različice 18 naprej. Podatki so v podmapi `<PG_MAJOR>/docker`, kar omogoča nadgradnjo s `pg_upgrade --link`.
- **Servis `db` ima healthcheck** (`pg_isready`), servis `app` pa se zažene šele, ko je baza pripravljena na povezave.
- **Ob zagonu servisa `app` se najprej izvede `bin/rails db:prepare`**, ki ustvari bazo (če še ne obstaja) in izvede čakajoče migracije. Po `docker compose down -v` zato baze ni treba ustvarjati ročno.
## Nov projekt iz predloge ## Nov projekt iz predloge
### 1. Kopiraj predlogo ### 1. Ustvari repozitorij iz predloge
Repozitorij `rails-docker-starter` je v Gitei označen kot predloga (*Make repository a template*).
1. V Gitei izberi **+ → New Repository**.
2. V polju **Template** izberi `rails-docker-starter`.
3. Obkljukaj **Git Content**. Ostale možnosti (webhooki, oznake ...) niso potrebne.
4. Vpiši ime novega repozitorija (npr. `moj-projekt`) in klikni **Create Repository**.
Nov repozitorij dobi datoteke predloge brez njene zgodovine. Gitea v datotekah, naštetih v `.gitea/template`, zamenja spremenljivke z imenom repozitorija: v `.env.example` tako `${REPO_NAME_SNAKE}_development` postane `moj_projekt_development`.
Nato repozitorij kloniraj:
```bash ```bash
git clone <url-predloge> moj-projekt git clone <url-novega-repozitorija>
cd moj-projekt cd moj-projekt
rm -rf .git && git init
``` ```
Če predlogo namesto tega kloniraš neposredno (`git clone`, nato `rm -rf .git && git init`), Gitea spremenljivk ne zamenja. V `.env` moraš `${REPO_NAME_SNAKE}` zamenjati ročno, sicer Compose spremenljivko razume kot prazno in baza se imenuje `_development`.
### 2. Nastavi okoljske spremenljivke ### 2. Nastavi okoljske spremenljivke
```bash ```bash
cp .env.example .env cp .env.example .env
``` ```
V `.env` vpiši ime baze, uporabnika in geslo. `APP_DATABASE_HOST` naj ostane `db` (ime servisa v Compose). V `.env` preveri ime baze in vpiši uporabnika in geslo. `APP_DATABASE_HOST` naj ostane `db` (ime servisa v Compose).
### 3. Zgradi sliko in namesti Rails ### 3. Zgradi sliko in namesti Rails
@@ -69,35 +84,53 @@ docker compose run --rm app rails new . --database=postgresql --skip-docker
``` ```
- `--skip-docker` prepreči, da bi Rails ustvaril svoj (produkcijski) `Dockerfile` in prepisal obstoječega. - `--skip-docker` prepreči, da bi Rails ustvaril svoj (produkcijski) `Dockerfile` in prepisal obstoječega.
- Ko vpraša, ali naj prepiše `.gitignore`, odgovori `n`. Če želiš, iz Rails-ove različice ročno dodaj manjkajoče vrstice. - Ko vpraša, ali naj prepiše `.gitignore`, odgovori `n`. Predloga že vsebuje vse vrstice, ki jih doda Rails.
- Ko vpraša, ali naj prepiše `README.md`, odgovori `n`, sicer izgubiš ta navodila. Navodila za aplikacijo lahko pozneje dopišeš sem. - Ko vpraša, ali naj prepiše `README.md`, odgovori `n`, sicer izgubiš ta navodila. Navodila za aplikacijo lahko pozneje dopišeš sem.
### 5. Poveži Rails z bazo ### 5. Poveži Rails z bazo
V `config/database.yml` razdelek `development` nastavi na okoljske spremenljivke: V `config/database.yml` dodaj nastavitve povezave v razdelek `default`, da veljajo za `development` in `test`:
```yaml ```yaml
default: &default
adapter: postgresql
encoding: unicode
max_connections: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
# Povezava na bazo v kontejnerju db (vrednosti iz .env)
host: <%= ENV["APP_DATABASE_HOST"] %>
port: <%= ENV.fetch("APP_DATABASE_PORT") { 5432 } %>
username: <%= ENV["APP_DATABASE_USERNAME"] %>
password: <%= ENV["APP_DATABASE_PASSWORD"] %>
development: development:
<<: *default <<: *default
database: <%= ENV["APP_DATABASE"] %> database: <%= ENV["APP_DATABASE"] %>
host: <%= ENV["APP_DATABASE_HOST"] %>
port: <%= ENV["APP_DATABASE_PORT"] %> test:
username: <%= ENV["APP_DATABASE_USERNAME"] %> <<: *default
password: <%= ENV["APP_DATABASE_PASSWORD"] %> database: <%= ENV["APP_DATABASE"] %>_test
``` ```
Razdelek `test` nastavi enako, le z drugim imenom baze (npr. `<%= ENV["APP_DATABASE"] %>_test`). Brez teh nastavitev se Rails poskuša povezati prek lokalnega socketa in javi `PG::ConnectionBad: connection to server on socket "/var/run/postgresql/.s.PGSQL.5432" failed`.
### 6. Ustvari bazo in zaženi aplikacijo ### 6. Dovoli web-console iz omrežja Docker
Brskalnik dostopa do aplikacije prek omrežja Docker (npr. `172.27.0.1`), web-console pa privzeto dovoli le `127.0.0.1`. V dnevniku se zato izpiše `Cannot render console from 172.27.0.1!`, konzola na strani z napako pa se ne prikaže. V `config/environments/development.rb` dodaj:
```ruby
# Dovoli web-console za zahteve iz omrežij Docker (privzeti bazeni naslovov).
config.web_console.allowed_ips = %w[172.16.0.0/12 192.168.0.0/16]
```
### 7. Zaženi aplikacijo
```bash ```bash
docker compose run --rm app bin/rails db:prepare
docker compose up docker compose up
``` ```
Aplikacija je dosegljiva na <http://localhost:3000>. Ob zagonu se samodejno izvede `bin/rails db:prepare`, ki ustvari bazo. Aplikacija je dosegljiva na <http://localhost:3000>.
### 7. Odkomentiraj namestitev gemov v Dockerfile ### 8. Odkomentiraj namestitev gemov v Dockerfile
Ko obstajata `Gemfile` in `Gemfile.lock`, v `Dockerfile` odkomentiraj: Ko obstajata `Gemfile` in `Gemfile.lock`, v `Dockerfile` odkomentiraj:
@@ -173,7 +206,13 @@ docker compose build
``` ```
**`could not translate host name "db"` ali `connection refused`** **`could not translate host name "db"` ali `connection refused`**
Preveri, da je v `.env` nastavljeno `APP_DATABASE_HOST=db` in da teče servis baze (`docker compose ps`). Ob prvem zagonu PostgreSQL potrebuje nekaj sekund za inicializacijo, zato ukaz po potrebi ponovi. Preveri, da je v `.env` nastavljeno `APP_DATABASE_HOST=db` in da teče servis baze (`docker compose ps`, stanje `healthy`). Pri `docker compose run` Compose sicer počaka na healthcheck, pri ročnem zagonu servisa `db` pa PostgreSQL ob prvem zagonu potrebuje nekaj sekund za inicializacijo.
**`PG::ConnectionBad: connection to server on socket "/var/run/postgresql/.s.PGSQL.5432" failed`**
Rails ne uporablja nastavitev iz `.env` in se poskuša povezati lokalno. Preveri `config/database.yml` (glej korak 5) in znova zaženi servis `app` (`docker compose restart app`).
**Kontejner `db` se ustavi z `Error: in 18+, these Docker images are configured to store database data in a format which is compatible with "pg_ctlcluster"`**
Volume `pgdata` je priklopljen na `/var/lib/postgresql/data`, slika `postgres` od različice 18 naprej pa pričakuje `/var/lib/postgresql`. Popravi priklop v `docker-compose.yml`. Če so v volumnu podatki starejše glavne različice, jih nadgradi s `pg_upgrade` ali izvozi in uvozi, sicer volume izbriši (`docker volume rm <projekt>_pgdata`).
**`A server is already running`** **`A server is already running`**
Ostala je datoteka s PID-om strežnika: Ostala je datoteka s PID-om strežnika:
+9 -3
View File
@@ -6,7 +6,7 @@ services:
dockerfile: Dockerfile dockerfile: Dockerfile
args: args:
PG_MAJOR: ${PG_MAJOR:-18} PG_MAJOR: ${PG_MAJOR:-18}
command: bin/rails server -b 0.0.0.0 -p 3000 command: bash -c "bin/rails db:prepare && bin/rails server -b 0.0.0.0 -p 3000"
ports: ports:
- "3000:3000" - "3000:3000"
env_file: .env env_file: .env
@@ -21,7 +21,8 @@ services:
- .:/app - .:/app
- bundle:/usr/local/bundle - bundle:/usr/local/bundle
depends_on: depends_on:
- db db:
condition: service_healthy
db: db:
image: postgres:${PG_MAJOR:-18} image: postgres:${PG_MAJOR:-18}
@@ -30,7 +31,12 @@ services:
POSTGRES_USER: ${APP_DATABASE_USERNAME} POSTGRES_USER: ${APP_DATABASE_USERNAME}
POSTGRES_PASSWORD: ${APP_DATABASE_PASSWORD} POSTGRES_PASSWORD: ${APP_DATABASE_PASSWORD}
volumes: volumes:
- pgdata:/var/lib/postgresql/data - pgdata:/var/lib/postgresql
healthcheck:
test: ["CMD-SHELL", "pg_isready -U $${POSTGRES_USER} -d $${POSTGRES_DB}"]
interval: 2s
timeout: 5s
retries: 15
volumes: volumes:
pgdata: pgdata: