Spring MVC - это Java Framework, которая используется для создания веб -приложений. Он следует за шаблоном проектирования моделей-контроллер.
@Annotations
Spring - это предварительный заказ Rails. Это ускоряет разработку, сохраняя ваше приложение запускаться в фоновом режиме, поэтому вам не нужно загружать его каждый раз, когда вы запускаете тест, сброшенные задачи или миграцию.
rails new для создания вашего приложения) Spring широко использует Process.fork .
Добавьте пружину в свой Gemfile:
gem "spring" , group : :development (ПРИМЕЧАНИЕ: Использование gem "spring", git: "..." не будет работать и не является поддерживаемым способом использования пружины.)
Рекомендуется «воспитывать» исполняемые файлы в вашем bin/ каталоге:
$ bundle install
$ bundle exec spring binstub --all
Это генерирует исполняемый файл bin/spring и вставляет небольшой фрагмент кода в соответствующие существующие исполняемые файлы. Фрагмент выглядит так:
begin
load File . expand_path ( '../spring' , __FILE__ )
rescue LoadError
endНа платформах, где пружина установлена и поддерживается, этот фрагмент подпрыгивает в выполнение команд. В других случаях фрагмент будет просто молча игнорировать, а линии после его выполнения будут выполняться как нормальные.
Если вы не хотите префикс каждой команды, которую вы вводите с помощью bin/ , вы можете использовать Direnv для автоматического добавления ./bin к вашему PATH , когда вы cd в свое приложение. Просто создайте файл .envrc с помощью Command PATH_add bin в вашем каталоге Rails.
Для этого прохождения я сгенерировал новое приложение Rails и запустил rails generate scaffold post name:string .
Давайте проведем тест:
$ 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
Это было не особенно быстро, потому что это был первый запуск, поэтому весна должна была загрузить приложение. Сейчас работает:
$ 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
Следующий запуск быстрее:
$ 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 catus Spring работает:
26150 Spring Server | Spring-Demo-App | Начало 36 секунд назад 26556 Spring App | Spring-Demo-App | Начал 1 секунду назад | тестовый режим
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 /rable маршруты, работающие через Spring Preloader in Process 2363 посты Get /posts(.: format) Posts#index post /posts(.:Format) Сообщения#Создать new_post get /posts/new(.:format) Сообщения#edit_post get /posts/:id/edit(.format) posts#edit get /post: watfost/posts. /posts/:ID(.: format) POSTS#UPDATE DELETE /POSTS/:ID(.:Format) POSTS#DUSTER
$ Bin/Spring Status Spring работает:
26150 Spring Server | Spring-Demo-App | Начало 1 мин назад 26556 Spring App | Spring-Demo-App | началось 42 секунды назад | Тестовый режим 26707 Spring App | Spring-Demo-App | Начало 2 секунды назад | Режим разработки
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 остановилась.
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:
$ bundle install -тест на разработку без разработки
## 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 Они выполняют команду Rails, которую вы уже знаете и любите. Если вы запустите другую под командование (например, rails server ), то Spring автоматически передаст ее до исполняемого файла rails (без ускорения).
Вы можете добавить их в свой Gemfile для дополнительных команд:
Test::Unit Тесты на рельсах 3, поскольку только RAILS 4 позволяет использовать rake test path/to/test для запуска конкретного теста/каталога.Если вам не нужно, чтобы код, связанный с пружиной, зарегистрирован в вашем хранилище источника, можно использовать пружину без добавления в ваш Gemfile. Тем не менее, использование Spring Binstubs без добавления пружины в Gemfile не поддерживается.
Чтобы использовать такую пружину, сделайте gem install spring , а затем команды префикса с spring . Например, вместо того, чтобы запустить bin/rake -T , вы запустили бы spring rake -T .
Если вы используете Spring Binstubs, но временно не хотите, чтобы команды выполнялись до пружины, установите переменную среды DISABLE_SPRING .
Spring использует механизм перезагрузки класса Rails ( ActiveSupport::Dependencies ), чтобы держать ваш код в курсе между тестовыми прогонами. Это тот же механизм, который позволяет вам видеть изменения во время разработки при обновлении страницы. Тем не менее, вы, возможно, никогда раньше не использовали этот механизм с вашей test средой, и это может вызвать проблемы.
Важно понять, что перезагрузка кода означает, что константы в вашем приложении являются разными объектами после изменения файлов:
$ bin/rails runner 'puts User.object_id'
70127987886040
$ touch app/models/user.rb
$ bin/rails runner 'puts User.object_id'
70127976764620
Предположим, что у вас есть config/initializers/save_user_class.rb
USER_CLASS = User Это сохраняет первую версию User класса, которая не будет тем же объектом, что и User после перезагрузки кода:
$ bin/rails runner 'puts User == USER_CLASS'
true
$ touch app/models/user.rb
$ bin/rails runner 'puts User == USER_CLASS'
false
Поэтому, чтобы избежать этой проблемы, не сохраняйте ссылки на константы приложения в коде инициализации.
По состоянию на весну 1.7, есть некоторая поддержка для этого. Смотрите этот пример репозитория для получения информации о том, как это сделать с Docker.
Spring будет читать ~/.spring.rb и config/spring.rb для пользовательских настроек. Обратите внимание, что ~/.spring.rb загружается до бундлера, но config/spring.rb загружается после бундлера. Поэтому, если у вас есть какие-либо spring-commands-* жемчужины, которые вы хотите быть доступны во всех проектах без необходимости добавления в Gemfile проекта, требуйте их в вашем ~/.spring.rb .
config/spring_client.rb также загружается до бундлера, и до начала серверного процесса его можно использовать для добавления новых команд верхнего уровня.
Весна должна знать, как найти ваше приложение Rails. Если у вас есть нормальное приложение, все работает из коробки. Если вы работаете над проектом со специальной настройкой (например, двигателем), вы должны сообщить Spring, где находится ваше приложение:
Spring . application_root = './test/dummy' Там нет Spring.before_fork обратный вызов. Чтобы запустить что -то перед вилкой, вы можете разместить его в ~/.spring.rb или config/spring.rb или в любом из файлов, которые получают выполнение, когда ваше приложение инициализация, например, config/application.rb , config/environments/*.rb или config/initializers/*.rb .
Возможно, вы захотите запустить код после того, как весна разделил процесс, но до запуска фактической команды. Возможно, вы захотите использовать обратный вызов after_fork , если вам нужно подключиться к внешней службе, выполнить общую очистку или настроить динамическую конфигурацию.
Spring . after_fork do
# run arbitrary code
end Если вы хотите зарегистрировать несколько обратных вызовов, вы можете просто позвонить Spring.after_fork несколько раз с разными блоками.
Spring автоматически обнаружит изменения файла в любой файл, загруженный при сапогах сервера. Изменения приведут к перезапущению затронутых сред.
Если есть дополнительные файлы или каталоги, которые должны запустить перезапуск приложения, вы можете указать их с помощью Spring.watch :
Spring . watch "config/some_config_file.yml"По умолчанию Spring Oplys FileSystem для изменений один раз каждые 0,2 секунды. Этот метод требует нулевой конфигурации, но если вы обнаружите, что он использует слишком много процессора, то вы можете использовать прослушивание файловой системы на основе событий, установив Gem Spring-Batcher-Listen.
Чтобы отключить сообщение «Запуск через Spring Preloader», которое отображается каждый раз, когда выполняется команда:
Spring . quiet = trueСледующие переменные среды используются к весне:
DISABLE_SPRING - Если установлено, Spring будет обойден, и ваше приложение будет загружаться в процессе переднего планаSPRING_LOG - Путь к файлу, который пружина будет писать сообщения журнала.SPRING_TMP_PATH - каталог, в котором пружина должен написать свои временные файлы (пид -файл и розетка). По умолчанию мы используем переменную среды XDG_RUNTIME_DIR , или иначе Dir.tmpdir , а затем создаем каталог в этом названном spring-$UID . Мы не используем tmp/ вашего приложения Rails приложения, потому что это может быть в файловой системе, которая не поддерживает розетки Unix.SPRING_APPLICATION_ID - используется для идентификации различных приложений Rails. По умолчанию это хэш MD5 текущего RUBY_VERSION и путь к вашему корне проекта Rails.SPRING_SOCKET - Путь, который следует использовать для сокета Unix, который Spring использует для связи с продолжительным процессом Spring Server. По умолчанию это SPRING_TMP_PATH/SPRING_APPLICATION_ID .SPRING_PIDFILE - Путь, который следует использовать для хранения писта длительного процесса Spring Server. По умолчанию это связано с пути сокета; Если путь сокета - /foo/bar/spring.sock , Pidfile будет /foo/bar/spring.pid .SPRING_SERVER_COMMAND - команда для запуска для запуска Spring Server, когда он еще не работает. По умолчанию spring _[version]_ server --background . Если вы хотите получить больше информации о том, что делает Spring, вы можете явно запустить пружину в отдельном терминале:
$ spring server
Вывод журнала будет напечатан в Stdout. Вы также можете отправить вывод журнала в файл с переменной среды SPRING_LOG .