Un Spring MVC es un marco Java que se utiliza para crear aplicaciones web. Sigue el patrón de diseño del controlador de visión modelo. Un MVC de resorte proporciona una solución elegante para usar MVC en el marco de resorte mediante la ayuda de DispatcherServlet.
@Annotations
La primavera es un precargado de la aplicación Rails. Acelera el desarrollo manteniendo su aplicación en segundo plano para que no necesite iniciarla cada vez que ejecute una prueba, tarea de rastrillo o migración.
rails new para generar su aplicación) Spring hace un uso extenso de Process.fork , por lo que no podrá proporcionar una velocidad en las plataformas que no admiten el bifurcado (Windows, Jruby).
Agregue el resorte a su archivo gem:
gem "spring" , group : :development (Nota: Uso de gem "spring", git: "..." No funcionará y no es una forma compatible de usar Spring).
Se recomienda 'springify' los ejecutables en su bin/ directorio:
$ bundle install
$ bundle exec spring binstub --all
Esto genera un ejecutable bin/spring e inserta un pequeño fragmento de código en ejecutables existentes relevantes. El fragmento se ve así:
begin
load File . expand_path ( '../spring' , __FILE__ )
rescue LoadError
endEn las plataformas donde se instala y admite Spring, este fragmento se conecta a la ejecución de comandos. En otros casos, el fragmento será ignorado en silencio y las líneas después de que se ejecutará como normal.
Si no desea prefijo todos los comandos que escriba con bin/ , puede usar Direnv para agregar automáticamente ./bin a su PATH cuando se realiza en cd en su aplicación. Simplemente cree un archivo .envrc con el PATH_add bin en su directorio de rieles.
Para este tutorial, he generado una nueva aplicación Rails, y Run rails generate scaffold post name:string .
Ejecutemos una prueba:
$ 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
Eso no fue particularmente rápido porque fue la primera carrera, por lo que Spring tuvo que arrancar la aplicación. Ahora está funcionando:
$ 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
La próxima carrera es más rápida:
$ 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 se está ejecutando:
26150 Spring Server | Spring-Demo-App | Comenzó hace 36 segundos 26556 Aplicación de primavera | Spring-Demo-App | Comenzó hace 1 segundo | modo de prueba
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 /rutas de rastrillo que se ejecutan a través de primavera preloader en el proceso 2363 publicaciones get /posts(.:Format) Publics#índice publicar /posts(.:Format) Publicaciones#Crear new_post get /posts/new(.:Format) Publicar#New Edit_Post get /posts/:id/edit(.:Format) Postes#Posts#get get get get /posts ébsat#::: n. /posts/:ID(
$ bin/spring status spring está funcionando:
26150 Spring Server | Spring-Demo-App | Comenzó hace 1 minuto 26556 Aplicación de primavera | Spring-Demo-App | Comenzó hace 42 segundos | Modo de prueba 26707 Aplicación Spring | Spring-Demo-App | Comenzó hace 2 segundos | modo de desarrollo
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 se detuvo.
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:
Instalación de $ Bundle -Prueba de desarrollo
## 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 Estos ejecutan el comando rieles que ya conoce y ama. Si ejecuta un sub comando diferente (por ejemplo, rails server ), entonces Spring lo pasará automáticamente al ejecutable rails subyacentes (sin la aceleración).
Puede agregarlos a su archivo gem para comandos adicionales:
Test::Unit en Rails 3, ya que solo Rails 4 le permite usar rake test path/to/test para ejecutar una prueba/directorio particular.Si no desea que el código relacionado con la primavera se registre en su repositorio de origen, es posible usar Spring sin agregar su archivo gem. Sin embargo, el uso de binstubs de primavera sin agregar resorte al archivo Gem no es compatible.
Para usar Spring como este, haga un gem install spring y luego prefijo comandos con spring . Por ejemplo, en lugar de ejecutar bin/rake -T , ejecutaría spring rake -T .
Si está utilizando binstubs de primavera, pero temporalmente no quiere que los comandos se ejecuten a través de Spring, establezca la variable de entorno DISABLE_SPRING .
Spring utiliza el mecanismo de recarga de clases de Rails ( ActiveSupport::Dependencies ) para mantener su código actualizado entre las pruebas. Este es el mismo mecanismo que le permite ver cambios durante el desarrollo cuando actualiza la página. Sin embargo, es posible que nunca haya utilizado este mecanismo con su entorno test antes, y esto puede causar problemas.
Es importante darse cuenta de que la recarga del código significa que las constantes en su aplicación son objetos diferentes después de que los archivos hayan cambiado:
$ bin/rails runner 'puts User.object_id'
70127987886040
$ touch app/models/user.rb
$ bin/rails runner 'puts User.object_id'
70127976764620
Suponga que tiene un inicializador config/initializers/save_user_class.rb así:
USER_CLASS = User Esto guarda la primera versión de la clase User , que no será el mismo objeto que User después de que el código haya sido recargado:
$ bin/rails runner 'puts User == USER_CLASS'
true
$ touch app/models/user.rb
$ bin/rails runner 'puts User == USER_CLASS'
false
Entonces, para evitar este problema, no guarde las referencias a las constantes de aplicación en su código de inicialización.
A partir de la primavera 1.7, hay cierto apoyo para hacer esto. Vea este repositorio de ejemplo para obtener información sobre cómo hacerlo con Docker.
Spring leerá ~/.spring.rb y config/spring.rb para configuraciones personalizadas. Tenga en cuenta que ~/.spring.rb se carga antes de Bundler, pero config/spring.rb se carga después de Bundler. Entonces, si tiene gemas spring-commands-* Instalado que desea estar disponible en todos los proyectos sin tener que agregarse al GemFile del proyecto, requiera que en su ~/.spring.rb .
config/spring_client.rb también se carga antes de Bundler y antes de que se inicie un proceso de servidor, se puede usar para agregar nuevos comandos de nivel superior.
Spring debe saber cómo encontrar su aplicación Rails. Si tiene una aplicación normal, todo funciona fuera de la caja. Si está trabajando en un proyecto con una configuración especial (un motor, por ejemplo), debe decirle a Spring dónde se encuentra su aplicación:
Spring . application_root = './test/dummy' No hay una devolución de llamada Spring.before_fork . Para ejecutar algo antes de la bifurcación, puede colocarlo en ~/.spring.rb o config/spring.rb o en cualquiera de los archivos que se ejecutan cuando su aplicación se inicializa, como config/application.rb , config/environments/*.rb o config/initializers/*.rb .
Es posible que desee ejecutar el código después de que Spring se desactivó el proceso, pero antes de que se ejecute el comando real. Es posible que desee utilizar una devolución de llamada after_fork si tiene que conectarse a un servicio externo, realizar una limpieza general o configurar la configuración dinámica.
Spring . after_fork do
# run arbitrary code
end Si desea registrar múltiples devoluciones de llamada, simplemente puede llamar Spring.after_fork varias veces con diferentes bloques.
Spring detectará automáticamente los cambios de archivo en cualquier archivo cargado cuando el servidor bote. Los cambios harán que se reinicie los entornos afectados.
Si hay archivos o directorios adicionales que deben activar una aplicación reiniciar, puede especificarlos con Spring.watch :
Spring . watch "config/some_config_file.yml"Por defecto, Spring encuesta el sistema de archivos para los cambios una vez cada 0.2 segundos. Este método requiere una configuración cero, pero si encuentra que está usando demasiada CPU, entonces puede usar el sistema de archivos basado en eventos escuchando instalando la gema de llave de spring-watcher.
Para deshabilitar el mensaje "Ejecutar a través de Spring Preloader" que se muestra cada vez que se ejecuta un comando:
Spring . quiet = trueLas siguientes variables de entorno son utilizadas por Spring:
DISABLE_SPRING : si se establece, el resorte se omitirá y su aplicación se iniciará en un proceso de primer planoSPRING_LOG : la ruta a un archivo a la que Spring escribirá mensajes de registro.SPRING_TMP_PATH : el directorio donde Spring debe escribir sus archivos temporales (un PIDFILE y un socket). Por defecto, usamos la variable de entorno XDG_RUNTIME_DIR , o de lo contrario Dir.tmpdir , y luego creamos un directorio en el llamado spring-$UID . No utilizamos el directorio tmp/ de su aplicación Rails porque eso puede estar en un sistema de archivos que no admite sockets Unix.SPRING_APPLICATION_ID : se utiliza para identificar aplicaciones distintas de rieles. Por defecto, es un hash MD5 de la RUBY_VERSION actual, y la ruta a la raíz del proyecto Rails.SPRING_SOCKET : la ruta que debe usarse para el socket Unix que Spring utiliza para comunicarse con el proceso de servidor Spring de larga duración. Por defecto, esto es SPRING_TMP_PATH/SPRING_APPLICATION_ID .SPRING_PIDFILE : la ruta que debe usarse para almacenar el PID del proceso de servidor de resorte de larga duración. Por defecto, esto está relacionado con la ruta de socket; Si la ruta de socket es /foo/bar/spring.sock , el Pidfile será /foo/bar/spring.pid .SPRING_SERVER_COMMAND : el comando para ejecutar para iniciar el servidor Spring cuando aún no se está ejecutando. El valor predeterminado a spring _[version]_ server --background . Si desea obtener más información sobre lo que está haciendo Spring, puede ejecutar Spring explícitamente en un terminal separado:
$ spring server
La salida de registro se imprimirá en Stdout. También puede enviar la salida del registro a un archivo con la variable de entorno SPRING_LOG .