Ein Spring MVC ist ein Java -Framework, mit dem Webanwendungen erstellt werden. Es folgt dem Entwurfsmuster des Modell-View-Controller-Designs. Ein Spring MVC bietet eine elegante Lösung für die Verwendung von MVC im Spring-Framework mithilfe von Dispatcherservlet.
@Annotations
Die Frühling ist ein Schienenantragsvorhaben. Es beschleunigt die Entwicklung, indem Ihre Anwendung im Hintergrund ausgeführt wird, sodass Sie sie nicht jedes Mal starten müssen, wenn Sie einen Test, eine Rake -Aufgabe oder eine Migration ausführen.
rails new durchführen, um Ihre Anwendung zu generieren) Frühling nutzt Process.fork ausführlich und kann also keine Geschwindigkeit auf Plattformen bereitstellen, die die Gabelung nicht unterstützen (Windows, Jruby).
Fügen Sie Ihrem GemFile Frühling hinzu:
gem "spring" , group : :development (Hinweis: Mit gem "spring", git: "..." funktioniert nicht und ist keine unterstützte Art der Verwendung von Frühling.)
Es wird empfohlen, die ausführbaren in Ihrem bin/ Verzeichnis zu "Springify": "Springify" empfohlen:
$ bundle install
$ bundle exec spring binstub --all
Dies generiert eine ausführbare Datei bin/spring und fügt einen kleinen Code -Ausschnitt in relevante vorhandene ausführbare Ausführungen ein. Der Ausschnitt sieht so aus:
begin
load File . expand_path ( '../spring' , __FILE__ )
rescue LoadError
endAuf Plattformen, auf denen die Feder installiert und unterstützt wird, fangen dieser Snippet in die Ausführung von Befehlen ein. In anderen Fällen wird das Snippet nur stillschweigend ignoriert und die Linien, nachdem es als normal ausgeführt wird.
Wenn Sie nicht jeden Befehl, den Sie mit bin/ eingeben, ein Präfixen haben möchten, können Sie ./bin beim cd in Ihre Anwendung automatisch zu Ihrem PATH hinzufügen. Erstellen Sie einfach eine .envrc -Datei mit dem Befehl PATH_add bin in Ihrem Rails -Verzeichnis.
Für diese Vorgehensweise habe ich eine neue Rails -Anwendung generiert und Run rails generate scaffold post name:string .
Lassen Sie uns einen Test durchführen:
$ time bin/rake test test/controllers/posts_controller_test.rb
Running via Spring preloader in process 2734
Run options:
# Running tests:
.......
Finished tests in 0.127245s, 55.0121 tests/s, 78.5887 assertions/s.
7 tests, 10 assertions, 0 failures, 0 errors, 0 skips
real 0m2.165s
user 0m0.281s
sys 0m0.066s
Das war nicht besonders schnell, da es der erste Lauf war, also musste der Frühling die Anwendung starten. Es läuft jetzt:
$ bin/spring status
Spring is running:
26150 spring server | spring-demo-app | started 3 secs ago
26155 spring app | spring-demo-app | started 3 secs ago | test mode
Der nächste Lauf ist schneller:
$ time bin/rake test test/controllers/posts_controller_test.rb
Running via Spring preloader in process 8352
Run options:
If we edit any of the application files, or test files, the changes will
be picked up on the next run without the background process having to
restart. This works in exactly the same way as the code reloading
which allows you to refresh your browser and instantly see changes during
development.
But if we edit any of the files which were used to start the application
(configs, initializers, your gemfile), the application needs to be fully
restarted. This happens automatically.
Let's "edit" `config/application.rb`:
$ touch config/application.rb $ Bin/Spring Status Spring wird ausgeführt:
26150 Spring Server | Frühlings-Demo-App | Begonnen vor 36 Sekunden 26556 Spring App | Frühlings-Demo-App | Vor 1 Sekunden angefangen | Testmodus
The application detected that `config/application.rb` changed and
automatically restarted itself.
If we run a command that uses a different environment, then that
environment gets booted up:
$ bin /rake Routes über Spring Preader im Prozess 2363 Beiträge get /posts(.:format) Beiträge#INDEX post /posts(.:format) Beiträge#CREATE NEW_POST Get /posts/New(.:format) Beiträge#new Edit_Post Get /posts/: format(.: format) posts#post /post /posts /posts/:id(.:format) Posts#Update löschen /posts/:ID(.:format) Beiträge#zerstören
$ Bin/Spring Status Spring läuft:
26150 Spring Server | Frühlings-Demo-App | Begonnen vor 1 Minuten 26556 Spring App | Frühlings-Demo-App | Begonnen vor 42 Sekunden vor | Testmodus 26707 Spring App | Frühlings-Demo-App | Begonnen vor 2 Sekunden | Entwicklungsmodus
There's no need to "shut down" Spring. This will happen automatically
when you close your terminal. However if you do want to do a manual shut
down, use the `stop` command:
$ Bin/Spring Stop Spring gestoppt.
From within your code, you can check whether Spring is active with `if defined?(Spring)`.
### Removal
To remove Spring:
* 'Unspring' your bin/ executables: `bin/spring binstub --remove --all`
* Remove spring from your Gemfile
### Deployment
You must not install Spring on your production environment. To prevent it from
being installed, provide the `--without development test` argument to the
`bundle install` command which is used to install gems on your production
machines:
$ bündel install -ohne Entwicklungstest
## Commands
### `rake`
Runs a rake task. Rake tasks run in the `development` environment by
default. You can change this on the fly by using the `RAILS_ENV`
environment variable. The environment is also configurable with the
`Spring::Commands::Rake.environment_matchers` hash. This has sensible
defaults, but if you need to match a specific task to a specific
environment, you'd do it like this:
``` ruby
Spring::Commands::Rake.environment_matchers["perf_test"] = "test"
Spring::Commands::Rake.environment_matchers[/^perf/] = "test"
# To change the environment when you run `rake` with no arguments
Spring::Commands::Rake.environment_matchers[:default] = "development"
rails console , rails generate , rails runner Diese führen den Befehl Rails aus, den Sie bereits kennen und lieben. Wenn Sie einen anderen Subbefehl ausführen (z. B. rails server ), übergibt die Spring ihn automatisch an die ausführbaren rails (ohne die Beschleunigung).
Sie können diese zu Ihrem GemFile hinzufügen, um zusätzliche Befehle zu erhalten:
Test::Unit -Tests auf Rails 3, da Sie nur Rails 4 rake test path/to/test verwenden können, um ein bestimmtes Test/ein bestimmtes Verzeichnis auszuführen.Wenn Sie keinen in Ihrem Quell-Repository überprüfenden Frühlingscode überprüft haben, können Sie Spring verwenden, ohne zu Ihrem GemFile hinzugefügt zu werden. Die Verwendung von Spring -Binstubs ohne Hinzufügen von Feder in die GemFile wird jedoch nicht unterstützt.
Um Feder so zu verwenden, gem install spring und Präfixbefehle mit spring . Anstatt bin/rake -T zu leiten, würden Sie zum Beispiel spring rake -T ausführen.
Wenn Sie Spring Binstubs verwenden, aber vorübergehend nicht möchten, dass Befehle durch Spring ausgeführt werden, setzen Sie die Umgebungsvariable DISABLE_SPRING .
Spring verwendet Rails 'Class Reloading -Mechanismus ( ActiveSupport::Dependencies ), um Ihren Code zwischen den Testläufen auf dem neuesten Stand zu halten. Dies ist der gleiche Mechanismus, mit dem Sie Änderungen während der Entwicklung sehen können, wenn Sie die Seite aktualisieren. Möglicherweise haben Sie diesen Mechanismus möglicherweise noch nie mit Ihrer test verwendet, und dies kann zu Problemen führen.
Es ist wichtig zu erkennen, dass das Code -Nachladen bedeutet, dass die Konstanten in Ihrer Anwendung unterschiedliche Objekte sind, nachdem sich die Dateien geändert haben:
$ bin/rails runner 'puts User.object_id'
70127987886040
$ touch app/models/user.rb
$ bin/rails runner 'puts User.object_id'
70127976764620
Angenommen, Sie haben eine Initialisierer config/initializers/save_user_class.rb SO:
USER_CLASS = User Dies speichert die erste Version der User , die nicht das gleiche Objekt wie User ist, nachdem der Code neu geladen wurde:
$ bin/rails runner 'puts User == USER_CLASS'
true
$ touch app/models/user.rb
$ bin/rails runner 'puts User == USER_CLASS'
false
Um dieses Problem zu vermeiden, speichern Sie die Verweise auf Anwendungskonstanten in Ihrem Initialisierungscode nicht.
Ab dem Frühling 1.7 wird dafür einige Unterstützung unterstützt. In diesem Beispiel -Repository finden Sie Informationen darüber, wie es mit Docker geht.
Spring wird ~/.spring.rb und config/spring.rb für benutzerdefinierte Einstellungen gelesen. Beachten Sie, dass ~/.spring.rb vor Bundler geladen wird, aber config/spring.rb nach Bundler geladen wird. Wenn Sie also spring-commands-* Gems installiert, dass Sie in allen Projekten verfügbar sein möchten, ohne dem GemFile des Projekts hinzugefügt werden zu müssen, benötigen Sie diese in Ihrem ~/.spring.rb .
config/spring_client.rb wird ebenfalls vor dem Bundler geladen und kann vor Beginn eines Serverprozesses neue Befehle auf oberster Ebene hinzufügen.
Der Frühling muss wissen, wie Sie Ihre Rails -Anwendung finden. Wenn Sie eine normale App haben, funktioniert alles in der Box. Wenn Sie an einem Projekt mit einem speziellen Setup (z. B. einem Motor) arbeiten, müssen Sie die Spring angeben, wo sich Ihre App befindet:
Spring . application_root = './test/dummy' Es gibt keinen Spring.before_fork -Rückruf. Um etwas vor der Gabel auszuführen, können Sie es in ~/.spring.rb oder config/spring.rb oder in eine der Dateien einfügen, die ausgeführt werden, wenn Ihre Anwendung initialisiert, wie z. B. config/application.rb , config/environments/*.rb config/initializers/*.rb .
Möglicherweise möchten Sie Code ausführen, nachdem Spring den Prozess aus dem Vorgang gestellt hat, bevor der tatsächliche Befehl ausgeführt wird. Möglicherweise möchten Sie einen after_fork -Rückruf verwenden, wenn Sie eine Verbindung zu einem externen Dienst herstellen, eine allgemeine Reinigung durchführen oder eine dynamische Konfiguration einrichten müssen.
Spring . after_fork do
# run arbitrary code
end Wenn Sie mehrere Rückrufe registrieren möchten, können Sie einfach Spring.after_fork mit verschiedenen Blöcken aufrufen.
Spring erkennt automatisch Dateiänderungen in jeder Datei, die beim Stiefel der Server geladen wird. Durch Änderungen werden die betroffenen Umgebungen neu gestartet.
Wenn zusätzliche Dateien oder Verzeichnisse vorhanden sind, die eine Anwendung neu starten sollten, können Sie diese mit Spring.watch angeben:
Spring . watch "config/some_config_file.yml"Standardmäßig wird das Dateisystem für Änderungen alle 0,2 Sekunden lang gefragt. Diese Methode erfordert keine Konfiguration, aber wenn Sie feststellen, dass sie zu viel CPU verwendet, können Sie das Ereignis-basierte Dateisystem-Zuhören verwenden, indem Sie das Juwelen mit Spring-Watcher-Listen installieren.
So deaktivieren Sie die Meldung "Über die Spring -Voroader laufen", die jedes Mal angezeigt wird, wenn ein Befehl ausgeführt wird:
Spring . quiet = trueDie folgenden Umgebungsvariablen werden vom Frühjahr verwendet:
DISABLE_SPRING - Wenn festgelegt wird, wird die Feder umgangen und Ihre Anwendung startet in einem VordergrundprozessSPRING_LOG - Der Pfad zu einer Datei, in die Spring Protokollnachrichten schreibt.SPRING_TMP_PATH - Das Verzeichnis, in dem der Spring seine temporären Dateien schreiben sollte (eine PIDFile und eine Buchse). Standardmäßig verwenden wir die Umgebungsvariable XDG_RUNTIME_DIR oder dank Dir.tmpdir und erstellen dann ein Verzeichnis in diesem namens spring-$UID . Wir verwenden tmp/ Verzeichnis Ihrer Rails -Anwendung nicht, da dies möglicherweise in einem Dateisystem liegt, das Unix -Sockets nicht unterstützt.SPRING_APPLICATION_ID - Wird verwendet, um verschiedene Rails -Anwendungen zu identifizieren. Standardmäßig handelt es sich um einen MD5 -Hash der aktuellen RUBY_VERSION und den Pfad zu Ihrer Rails -Projektwurzel.SPRING_SOCKET - Der Pfad, der für den UNIX -Socket verwendet werden sollte, mit dem Spring mit dem langjährigen Spring Server -Prozess kommuniziert. Standardmäßig ist dies SPRING_TMP_PATH/SPRING_APPLICATION_ID .SPRING_PIDFILE - Der Pfad, mit dem die Haltung des langjährigen Springserverprozesses gespeichert werden sollte. Standardmäßig hängt dies mit dem Socket -Pfad zusammen; Wenn der Socket -Pfad /foo/bar/spring.sock ist, ist die PIDFile /foo/bar/spring.pid .SPRING_SERVER_COMMAND - Der Befehl, der ausgeführt wird, um den Spring -Server zu starten, wenn er noch nicht ausgeführt wird. Standardmäßig zu spring _[version]_ server --background . Wenn Sie weitere Informationen darüber erhalten möchten, was der Frühling tut, können Sie den Frühling explizit in einem separaten Terminal ausführen:
$ spring server
Die Protokollierungsausgabe wird in STDOut gedruckt. Sie können auch die Protokollausgabe an eine Datei mit der SPRING_LOG -Umgebungsvariable senden.