Het inzetten van Ruby on Rails-toepassingen voor productie kan complex zijn als gevolg van afhankelijkheden, omgevingsconfiguraties en serverconfiguraties. Containerisatie met Docker vereenvoudigt dit proces door het creëren van geïsoleerde, reproduceerbaare omgevingen. Dit artikel onderzoekt hoe u een Rails-app kunt containeriseren met behulp van Docker voor naadloze productie-implementatie.

Waarom Container Ruby op Rails Toepassingen?

Containerizing Rails toepassingen biedt tal van voordelen:

  • Consistentie: Zorgt ervoor dat de app dezelfde weg loopt over ontwikkeling, enscenering en productie.
  • Schaalbaarheid: Makkelijk te schalen containers om meer verkeer te verwerken.
  • Isolatie: Vermijd conflicten met andere toepassingen en afhankelijkheden op de server.
  • Portabiliteit: Toepassingen verplaatsen tussen omgevingen zonder wijzigingen.

Het instellen van Docker voor een Rails-toepassing

Om een Rails-app te containerren, start met het aanmaken van een Dockerfile die de omgeving definieert. Dit bestand specificeert de basisafbeelding, afhankelijkheden en commando's om de app uit te voeren.

Voorbeeld van dockerbestand

Hieronder volgt een voorbeeld van Dockerfile voor een Rails toepassing:

FROM ruby:3.1.0

# Install dependencies
RUN apt-get update -qq && apt-get install -y nodejs postgresql-client

# Set working directory
WORKDIR /app

# Add Gemfile and install gems
COPY Gemfile* /app/
RUN bundle install

# Copy the rest of the application code
COPY . /app

# Precompile assets
RUN RAILS_ENV=production bundle exec rails assets:precompile

# Expose port 3000
EXPOSE 3000

# Start the server
CMD ["bundle", "exec", "puma", "-C", "config/puma.rb"]

Het instellen van de Docker-compose voor Multi-Container-instellingen

Voor de productie, is het gebruikelijk om Docker Compose te gebruiken om meerdere containers te beheren, zoals de Rails app en de database. Hier is een voorbeeld van docker-compose.yml bestand:

version: '3.8'

services:
 db:
 image: postgres:13
 environment:
 POSTGRES_USER: railsuser
 POSTGRES_PASSWORD: password
 POSTGRES_DB: railsapp_production
 volumes:
 - db_data:/var/lib/postgresql/data

 web:
 build: .
 ports:
 - "3000:3000"
 environment:
 DATABASE_URL: postgres://railsuser:password@db:5432/railsapp_production
 depends_on:
 - db

volumes:
 db_data:

Inzet in productie

Eenmaal geconfigureerd, bouwen en uitvoeren van uw containers:

docker-compose build
docker-compose up -d

Zorg ervoor dat uw serveromgeving Docker en Docker Compose ondersteunt. U kunt dan via het IP-adres van de server toegang krijgen tot uw Rails-app op poort 3000.

Conclusie

Containerizing Ruby on Rails applicaties met Docker stroomlijnt implementatie, verbetert consistentie, en vereenvoudigt schaalvergroting. Door het creëren van een Dockerfile en het gebruik van Docker Compose, kunnen ontwikkelaars efficiënt hun Rails apps verplaatsen naar productieomgevingen met vertrouwen.