SPRING MVC هو إطار Java يستخدم لإنشاء تطبيقات الويب. يتبع نمط تصميم النماذج-المراقبة.
annotations
الربيع هو تطبيق Rails Preloader. يسرع التطوير عن طريق الحفاظ على تشغيل التطبيق الخاص بك في الخلفية حتى لا تحتاج إلى تشغيله في كل مرة تقوم فيها بإجراء اختبار أو مهمة أشعل النار أو الترحيل.
rails new لإنشاء تطبيقك) يستخدم Spring على نطاق واسع Process.fork .
أضف الربيع إلى gemfile الخاص بك:
gem "spring" , group : :development (ملاحظة: استخدام gem "spring", git: "..." لن يعمل وليس وسيلة مدعومة لاستخدام الربيع.)
يوصى بـ "Springify" التنفيذيين في bin/ Directory:
$ bundle install
$ bundle exec spring binstub --all
هذا يولد bin/spring قابلًا للتنفيذ ، ويقوم بإدراج مقتطف صغير من التعليمات البرمجية إلى التنفيذيين الحاليين. المقتطف يشبه هذا:
begin
load File . expand_path ( '../spring' , __FILE__ )
rescue LoadError
endعلى المنصات التي يتم فيها تثبيت الربيع ودعمها ، يربط هذا المقتطف في تنفيذ الأوامر. في حالات أخرى ، سيتم تجاهل المقتطف بصمت والخطوط بعد تنفيذها كالمعتاد.
PATH كنت cd ترغب في بادئة كل أمر تكتبه باستخدام bin/ ، فيمكنك استخدام DirenV ./bin . ما عليك سوى إنشاء ملف .envrc مع 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
لم يكن ذلك سريعًا بشكل خاص لأنه كان المدى الأول ، لذلك كان على Spring تشغيل التطبيق. إنه يعمل الآن:
$ 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 status spring قيد التشغيل:
26150 Spring Server | الربيع-ديمو التطبيق | بدأت 36 ثانية منذ 26556 الربيع التطبيق | الربيع-ديمو التطبيق | بدأت منذ 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 /rake routes قيد التشغيل عبر Spring Preloader in Process 2363 Posts get /posts(.:format) posts#index post /posts(.:format) posts#create new_post get /posts/new(.:format) posts#new edit_post get /posts/:id/edit post) /posts/:ID(.:
$ bin/spring status spring قيد التشغيل:
26150 Spring Server | الربيع-ديمو التطبيق | بدأت منذ 1 دقيقة 26556 الربيع التطبيق | الربيع-ديمو التطبيق | بدأت 42 ثانية منذ | وضع الاختبار 26707 Spring 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:
تثبيت حزمة $ -دون اختبار التطوير
## 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 التي تعرفها بالفعل وتحبها. إذا قمت بتشغيل أمر فرعي مختلف (EG rails server ) ، فسيتم نقله Spring تلقائيًا إلى rails الأساسية القابلة للتنفيذ (بدون تسريع).
يمكنك إضافة هذه إلى gemfile لأوامر إضافية:
Test::Unit على القضبان 3 ، حيث يتيح لك Rails 4 فقط استخدام rake test path/to/test لتشغيل دليل/دليل معين.إذا كنت لا ترغب في فحص التعليمات البرمجية المتعلقة بـ Spring في مستودع المصدر الخاص بك ، فمن الممكن استخدام Spring دون إضافة Gemfile. ومع ذلك ، فإن استخدام 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.rb و config/spring.rb للإعدادات المخصصة. لاحظ أنه يتم تحميل ~/.spring.rb قبل Bundler ، ولكن يتم تحميل config/spring.rb بعد Bundler. لذا ، إذا كان لديك أي spring-commands-* للأحجار الكريمة التي تريد أن تكون متاحًا في جميع المشاريع دون الحاجة إلى إضافتها إلى Gemfile للمشروع ، تطلب منها في ~/.spring.rb الخاص بك.
يتم تحميل config/spring_client.rb أيضًا قبل Bundler وقبل بدء عملية الخادم ، يمكن استخدامها لإضافة أوامر جديدة من المستوى الأعلى.
يجب أن يعرف الربيع كيفية العثور على تطبيق 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"بشكل افتراضي ، استطلاعات الربيع ، نظام الملفات للتغييرات مرة واحدة كل 0.2 ثانية. تتطلب هذه الطريقة تكوين صفر ، ولكن إذا وجدت أنها تستخدم الكثير من وحدة المعالجة المركزية ، فيمكنك استخدام نظام الملفات المستند إلى الحدث عن طريق تثبيت GEM-Watcher-Risten GEM.
لتعطيل رسالة "الجري عبر Spring Preloader" والتي يتم عرضها في كل مرة يتم تشغيل الأمر:
Spring . quiet = trueيتم استخدام متغيرات البيئة التالية بواسطة الربيع:
DISABLE_SPRING - إذا تم تعيينه ، فسيتم تجاوز Spring وسيتم تشغيل تطبيقك في عملية مقدمةSPRING_LOG - المسار إلى ملف سيكتب رسائل السجل إليه.SPRING_TMP_PATH - الدليل الذي يجب أن يكتب فيه الربيع ملفاته المؤقتة (pidfile ومقبس). بشكل افتراضي ، نستخدم متغير بيئة XDG_RUNTIME_DIR ، أو آخر Dir.tmpdir ، ثم إنشاء دليل في هذا spring-$UID . نحن لا نستخدم دليل tmp/ Application الخاص بقضبانك لأن ذلك قد يكون على نظام ملفات لا يدعم مآخذ UNIX.SPRING_APPLICATION_ID - يستخدم لتحديد تطبيقات القضبان المتميزة. بشكل افتراضي ، إنه تجزئة MD5 من RUBY_VERSION الحالي ، والمسار إلى جذر مشروع Rails الخاص بك.SPRING_SOCKET - المسار الذي يجب استخدامه لمقبس UNIX الذي يستخدمه الربيع للتواصل مع عملية خادم الزنبرك على المدى الطويل. بشكل افتراضي ، هذا هو SPRING_TMP_PATH/SPRING_APPLICATION_ID .SPRING_PIDFILE - المسار الذي يجب استخدامه لتخزين PID لعملية خادم الربيع طويل الأجل. بشكل افتراضي ، يرتبط هذا بمسار المقبس ؛ إذا كان مسار المقبس هو /foo/bar/spring.sock فسيكون pidfile /foo/bar/spring.pid .SPRING_SERVER_COMMAND - يتم تشغيل الأمر لبدء خادم الربيع عندما لا يكون قيد التشغيل بالفعل. الإعدادات الافتراضية إلى spring _[version]_ server --background . إذا كنت ترغب في الحصول على مزيد من المعلومات حول ما يفعله الربيع ، فيمكنك تشغيل Spring بشكل صريح في محطة منفصلة:
$ spring server
سيتم طباعة إخراج التسجيل إلى stdout. يمكنك أيضًا إرسال إخراج السجل إلى ملف مع متغير بيئة SPRING_LOG .