Gems für Ruby on Rails Projekte


Ich suche mir immer wieder aufs neue die Gems raus, die ich gerne als Programmierhelferlein benutzen möchte, daher hier eine kleine Zusammenfassung. Vielleicht gibt es da ja auch noch einen Gem, den ihr für nützlich halten könntet.

RuboCop

Ein Static Code Analyzer, um den Ruby Style Guide einzuhalten.

# Gemfile
group :development do
  gem 'rubocop', require: false
end

Robocop kann zwischendurch etwas anstrengend sein, aber sobald man sich dran gewöhnt ist dieser Gem super praktisch. Damit RuboCop einem kein Kopfzerbrechen bereitet, gibt es noch ein paar Tipps auf dem Weg. Man kann für die Kleinigkeiten rubocop --auto-correct bzw. bei einem Projekt mit Rails auch rubocop -R --auto-correct ausführen, dieser Befehl prüft nicht nur, sondern korrigiert auch schon sehr viel. Der -R Schalter prüft noch zusätzliche RailsCops.

Und meine Standardkonfiguration:

# .rubocop.yml

#inherit_from: .rubocop_todo.yml

Metrics:
  Exclude:
    - 'config/**/*'
    - 'db/schema.rb'

Metrics/LineLength:
  Max: 130

Metrics/MethodLength:
  Max: 25

Style/Documentation:
  Enabled: false

Es wäre auch eine Möglichkeit RuboCop vor einem Git-Push oder einem Commit automatisch auszuführen. Dazu muss die Datei .git/hooks/pre-push bzw. .git/hooks/pre-commit angelegt werden. Dadurch schmeißt nicht überprüfter Code im Zweifel Fehler und verhindert somit den Push/Commit

#!/usr/bin/env bash
rubocop

Annotate

Dokumentiert halbautomatisch Model, Routes, Fixtures usw. Über den Befehl annotate -r werden eure Routen in der routes.rb abgebildet und mit annotate -i -k werden die Attribute inkl. Fremdschlüsselbeziehungen in euren Model Dateien abgebildet.

# Gemfile
group :development do
  gem 'annotate'
end

Bullet

Hilft bei der Erkennung von N+1 Problemen, schmeißt je nach Konfiguration Warnungen in der Console und/oder im Log

# Gemfile
group :development do
  gem 'bullet'
end

Man kann noch in viel mehr Channels loggen, mir reichen jedoch die Console und ein kleiner Hinweis beim Seitenaufruf

# config/environments/development.rb

config.after_initialize do
  Bullet.enable = true
  Bullet.console = true
  Bullet.add_footer = true
  Bullet.bullet_logger = true
end

Oink

Ein Logparser, um Speicherlecks besser zu erkennen

# Gemfile
group :development do
  gem 'oink'
end

Oink muss noch initalisiert werden, dafür legt ihr unter config/initalizers einfach so eine Datei ab.

# config/initalizers/oink.rb
Rails.application.middleware.use Oink::Middleware if Rails.env.development?

Um das kopieren zu vereinfachen

# Gemfile
group :development do
  gem 'annotate'
  gem 'bullet'
  gem 'oink'
  gem 'rubocop', require: false

  # Standard Rails Gems
  gem 'listen', '>= 3.0.5', '< 3.2'
  gem 'web-console', '>= 3.3.0'
  gem 'spring'
  gem 'spring-watcher-listen', '~> 2.0.0'
end