2016-04-19 13 views
2

Neue Rubyist hier. In meinen Vorlesungen über Ruby habe ich verschiedene Tricks/Shortcuts zum Hinzufügen von Dateiabhängigkeiten zur Datei config/environment gefunden, damit das Programm reibungslos läuft. Es war mir unklar, welche von diesen kombiniert redundant sind; Welches sind die besten Praktiken? und die sind völlig nutzlos und/oder falsch und sollte der lange Weg getan werden. Klärung wäre erwünscht!Wie kann/sollte ich Ruby-Projektdateiabhängigkeiten in config/environment einbeziehen?

Die, die ich bin gekommen, across:

  • require_relative "../lib/test1.rb"
  • : << '.' & require "lib/test1.rb"
  • : << '.' & Dir['lib/*.rb'].each {|f| require f}
  • require File.dirname(__FILE__)
  • "require-all" gem

Fühlen frei auch andere Wege einzuschließen!

Antwort

1

config/environment.rb ist eine Datei, zu der das Rails-Framework selbst Meinungen hat. Während der Laufzeit Ihrer Anwendung werden Sie positiv dazu neigen, diese Datei nicht zu ändern (wenn Sie es vermeiden können). Dies ermöglicht den einfachsten möglichen Upgrade-Pfad. Erwägen Sie, Ihre Initialisierung in eine Datei in config/initializers zu platzieren.

Wenn Ihr Code das Verhalten von Rails so grundlegend ändert, dass die Platzierung in config/initializers seine Potenz verliert oder wenn die langfristige Wartung Ihres Codes keine Rolle spielt, werde ich das Obige berücksichtigen. Items 2 + 3 funktionieren, indem Sie an Ihre LOAD_PATH anhängen, was ich nicht empfehlen würde, geschweige denn, eine Best Practice zu nennen. (Hinzufügen von RAILS_ROOT/config ist möglicherweise kein großes Problem, aber Sie könnten einige sehr schwierig zu Debug-Fehler erstellen.)

Die Position von config/environment.rb hat sich seit langer Zeit nicht geändert, so relative Anforderung (dh Option # 1) ist wahrscheinlich in Ordnung. require File.dirname(__FILE__) selbst tut nichts (Sie benötigen ein Verzeichnis), aber es lohnt sich, in einem Ansatz wie require File.join[File.dirname(__FILE__), '../lib/your_file.rb'] zu erinnern, die unabhängig von Ladepfad oder Arbeitsverzeichnis Bedenken funktioniert. Das würde ich tun.

Ich würde keinen Edelstein dafür verwenden, da sich das Verhalten des Edelsteins auf unvorhersehbare Weise ändern könnte, und Sie bereits in einem Bereich sind, in dem Rails Ihre Wahl ungünstig machen kann.

Verwandte Themen