1 Atnaujinimas iki Rails 4.0
Jei atnaujinote esamą programą, prieš pradedant gerai būtų turėti geras testavimo galimybes. Taip pat pirmiausia turėtumėte atnaujinti iki Rails 3.2, jei dar to nedarėte, ir įsitikinti, kad jūsų programa vis dar veikia kaip tikėtasi, prieš bandant atnaujinti iki Rails 4.0. Atnaujinimo metu reikėtų atkreipti dėmesį į keletą dalykų, kuriuos galima rasti Ruby on Rails atnaujinimo vadove.
2 Rails 4.0 programos kūrimas
# Turite įdiegtą 'rails' RubyGem
$ rails new myapp
$ cd myapp
2.1 Gems'ų pardavimas
Rails dabar naudoja Gemfile
programos šakninėje direktorijoje, kad nustatytų jums reikalingus gems'us, kad jūsų programa galėtų paleisti. Šis Gemfile
apdorojamas naudojant Bundler gem'ą, kuris tada įdiegia visus jūsų priklausomybes. Jis netgi gali įdiegti visas priklausomybes vietiniame jūsų programos aplanke, kad ji nebūtų priklausoma nuo sistemos gems'ų.
Daugiau informacijos: Bundler pagrindinis puslapis
2.2 Gyvenimas ant krašto
Bundler
ir Gemfile
padaro jūsų Rails programos užšaldymą labai paprastą su nauju specialiu bundle
komanda. Jei norite tiesiogiai iš Git saugyklos įdiegti, galite perduoti --edge
parametrą:
$ rails new myapp --edge
Jei turite vietinę Rails saugyklą ir norite sukurti programą naudodami ją, galite perduoti --dev
parametrą:
$ ruby /path/to/rails/railties/bin/rails new myapp --dev
3 Pagrindinės funkcijos
3.1 Atnaujinimas
- Ruby 1.9.3 (pakeitimas) - Pageidaujamas Ruby 2.0; reikalingas 1.9.3+
- Nauja pasenusių funkcijų politika - Pasenusios funkcijos yra įspėjimai Rails 4.0 ir bus pašalintos Rails 4.1.
- ActionPack puslapio ir veiksmo talpinimas (pakeitimas) - Puslapio ir veiksmo talpinimas išskirtas į atskirą gem'ą. Puslapio ir veiksmo talpinimas reikalauja per daug rankinio įsikišimo (rankinio talpinimo atnaujinant pagrindinius modelio objektus). Vietoj to naudokite rusiško lėlių talpinimą.
- ActiveRecord stebėtojai (pakeitimas) - Stebėtojai išskirti į atskirą gem'ą. Stebėtojai reikalingi tik puslapio ir veiksmo talpinimui ir gali sukelti spageti kodo rašymą.
- ActiveRecord sesijos saugykla (pakeitimas) - ActiveRecord sesijos saugykla išskirta į atskirą gem'ą. Sesijų saugojimas SQL yra brangus. Vietoj to naudokite slapukų sesijas, memcache sesijas arba pasirinktinę sesijos saugyklą.
- ActiveModel masinio priskyrimo apsauga (pakeitimas) - Rails 3 masinio priskyrimo apsauga yra pasenusi. Vietoj to naudokite stiprius parametrus.
- ActiveResource (pakeitimas) - ActiveResource išskirtas į atskirą gem'ą. ActiveResource nebuvo plačiai naudojamas.
vendor/plugins pašalintas (pakeitimas) - Naudokite
Gemfile
valdyti įdiegtus gem'us.ActionPack
Stipriosios parametrai (commit) - Leidžiama atnaujinti modelio objektus tik su leidžiamais parametrais (
params.permit(:title, :text)
).Maršruto susirūpinimai (commit) - Maršruto DSL, išskiriant bendrus submaršrutus (
comments
iš/posts/1/comments
ir/videos/1/comments
).ActionController::Live (commit) - Srautinė JSON su
response.stream
.Deklaratyvūs ETag'ai (commit) - Pridedami kontrolerio lygio ETag'ai, kurie bus dalis veiksmo ETag'o skaičiavimo.
Rusų lėlių talpinimas (commit) - Talpinami lizdinių rodinių dalys. Kiekviena dalis pasibaigia pagal priklausomybių rinkinį (talpinimo raktą). Talpinimo raktas paprastai yra šablono versijos numeris ir modelio objektas.
Turbolinks (commit) - Tarnaukite tik vieną pradinį HTML puslapį. Kai vartotojas pereina į kitą puslapį, naudokite pushState, kad atnaujintumėte URL ir naudokite AJAX, kad atnaujintumėte pavadinimą ir kūną.
Atskirti ActionView nuo ActionController (commit) - ActionView buvo atskirta nuo ActionPack ir bus perkelta į atskirą gemą „Rails 4.1“.
Nepriklausyti nuo ActiveModel (commit) - ActionPack daugiau neprisideda nuo ActiveModel.
3.2 Bendras
- ActiveModel::Model (commit) -
ActiveModel::Model
, mišinys, leidžiantis normaliems Ruby objektams dirbti su ActionPack iškart (pvz.,form_for
). - Nauja taikinio API (commit) - Taikiniai visada turi naudoti iškviečiamuosius.
- Schemos talpinimo išmetimas (commit) - Siekiant pagerinti „Rails“ paleidimo laiką, vietoj schemos tiesioginio įkėlimo iš duomenų bazės, įkelkite schemą iš išmetimo failo.
- Paramos nustatant transakcijos izoliacijos lygį (commit) - Pasirinkite, ar svarbiau yra pasikartojantys skaitymai ar pagerinta našumas (mažiau užrakinimo).
- Dalli (commit) - Naudokite Dalli memcache klientą memcache saugyklai.
- Pranešimų pradžia ir pabaiga (commit) - „Active Support“ instrumentacija praneša prenumeratoriams apie pradžios ir pabaigos pranešimus.
- Numatytasis gijų saugumas (commit) - „Rails“ gali veikti gijomis pagrįstose programų serveriose be papildomo konfigūravimo.
PASTABA: Patikrinkite, ar naudojami jūsų naudojami gemai yra gijų saugūs.
- PATCH veiksmas (commit) - „Rails“ atveju, PATCH pakeičia PUT. PATCH naudojamas daliniam išteklių atnaujinimui.
3.3 Saugumas
- Atitikimas neaptinka visų (commit) - Maršruto DSL, atitikimas reikalauja nurodyti HTTP veiksmą ar veiksmus.
- HTML simboliai pagal nutylėjimą išvengiami (commit) - Eilutės, atvaizduojamos erb, išvengiamos, nebent apgaubtos
raw
arba iškviestashtml_safe
. - Nauji saugumo antraštės (commit) - „Rails“ siunčia šias antraštes su kiekvienu HTTP užklausos:
X-Frame-Options
(neleidžia paspaudimų apgaulingumui, draudžia naršyklei įterpti puslapį į rėmelį),X-XSS-Protection
(prašo naršyklei sustabdyti scenarijaus įterpimą) irX-Content-Type-Options
(neleidžia naršyklei atverti jpeg kaip exe). Savybių išgavimas į gemus ---------------------------
Rails 4.0 versijoje kelios savybės buvo išgautos į gemus. Norėdami atkurti funkcionalumą, tiesiog pridėkite išgautus gemus į savo Gemfile
.
- Hash-based & Dinaminiai paieškos metodai (GitHub)
- Masinio priskyrimo apsauga Active Record modeliuose (GitHub, Pull Request)
- ActiveRecord::SessionStore (GitHub, Pull Request)
- Active Record Observers (GitHub, Commit)
- Active Resource (GitHub, Pull Request, Blog)
- Action Caching (GitHub, Pull Request)
- Page Caching (GitHub, Pull Request)
- Sprockets (GitHub)
- Veikimo testai (GitHub, Pull Request)
4 Dokumentacija
Gidai yra persirašyti naudojant GitHub Flavored Markdown.
Gidai turi atsakingą dizainą.
5 Railties
Išsamesnių pakeitimų informacijai žiūrėkite Changelog.
5.1 Pastebimi pakeitimai
Nauji testavimo vietos
test/models
,test/helpers
,test/controllers
irtest/mailers
. Taip pat pridėtos atitinkamos rake užduotys. (Pull Request)Jūsų programos vykdomieji failai dabar yra
bin/
kataloge. Paleiskiterake rails:update:bin
, kad gautumėtebin/bundle
,bin/rails
irbin/rake
.Gijų saugumas įjungtas pagal numatytuosius nustatymus.
Galimybė naudoti pasirinktinį kūrėją, perduodant
--builder
(arba-b
) įrails new
, pašalinta. Svarstykite naudoti aplikacijos šablonus vietoj to. (Pull Request)
5.2 Pasenusios funkcijos
config.threadsafe!
pasenusi, naudokiteconfig.eager_load
, kuris suteikia išsamesnį valdymą, ką reikia įkelti iš anksto.Rails::Plugin
panaikinta. Vietoj įkelkite įskiepius įvendor/plugins
naudodami gemus arba bundler su keliu arba git priklausomybėmis.
6 Action Mailer
Išsamesnių pakeitimų informacijai žiūrėkite Changelog.
6.1 Pastebimi pakeitimai
6.2 Pasenusios funkcijos
7 Active Model
Išsamesnių pakeitimų informacijai žiūrėkite Changelog.
7.1 Pastebimi pakeitimai
Pridėtas
ActiveModel::ForbiddenAttributesProtection
, paprastas modulis, skirtas apsaugoti atributus nuo masinio priskyrimo, kai perduodami neleidžiami atributai.Pridėtas
ActiveModel::Model
, mišinys, leidžiantis Ruby objektams veikti su Action Pack iškart.
7.2 Pasenusios funkcijos
8 Active Support
Išsamesnių pakeitimų informacijai žiūrėkite Changelog.
8.1 Pastebimi pakeitimai
Pakeistas pasenusių
memcache-client
gemo naudojimas įdalli
ActiveSupport::Cache::MemCacheStore
.Optimizuotas
ActiveSupport::Cache::Entry
, kad būtų sumažintas atminties ir apdorojimo našumo sąnaudos.Inflekcijos dabar gali būti apibrėžiamos pagal lokalę.
singularize
irpluralize
priima papildomą argumentą - lokalę.Object#try
dabar grąžinsnil
, o ne iškelsNoMethodError
, jei gavimo objektas neįgyvendina metodo, tačiau vis tiek galite gauti senąjį elgesį naudodami naująObject#try!
.String#to_date
dabar iškeliaArgumentError: invalid date
vietojeNoMethodError: undefined method 'div' for nil:NilClass
kai pateikiamas neteisingas data. Dabar tai yra tas pats kaip irDate.parse
, ir ji priima daugiau neteisingų datų nei 3.x versija, pvz.:# ActiveSupport 3.x "asdf".to_date # => NoMethodError: undefined method `div' for nil:NilClass "333".to_date # => NoMethodError: undefined method `div' for nil:NilClass # ActiveSupport 4 "asdf".to_date # => ArgumentError: invalid date "333".to_date # => Pen, 2013 m. lapkričio 29 d.
8.2 Pasenusios funkcijos
Pasenusi
ActiveSupport::TestCase#pending
funkcija, naudokiteskip
iš minitest vietoje.ActiveSupport::Benchmarkable#silence
funkcija pasenusi dėl jos trūkumo gijų saugumui. Ji bus pašalinta be pakeitimo Rails 4.1 versijoje.ActiveSupport::JSON::Variable
yra pasenusi. Apibrėžkite savo#as_json
ir#encode_json
metodus, skirtus tinkintiems JSON eilučių literalomis.Pasenusi suderinamumo funkcija
Module#local_constant_names
, naudokiteModule#local_constants
vietoje (kuris grąžina simbolius).ActiveSupport::BufferedLogger
yra pasenusi. NaudokiteActiveSupport::Logger
arba žurnalistą iš Ruby standartinės bibliotekos.Pasenusi
assert_present
irassert_blank
funkcijos, naudokiteassert object.blank?
irassert object.present?
vietoje.
9 Veiksmų paketas
Išsamesnius pakeitimus žr. Changelog.
9.1 Svarbūs pakeitimai
- Pakeista išimčių puslapių stiliaus plėtinio režime. Be to, visuose išimčių puslapiuose taip pat rodoma kodo eilutė ir fragmentas, kuris sukėlė išimtį.
9.2 Pasenusios funkcijos
10 Aktyvusis įrašas
Išsamesnius pakeitimus žr. Changelog.
10.1 Svarbūs pakeitimai
Gerinamos būdai rašyti
change
migracijas, todėl senosiosup
irdown
metodai nebėra būtini.drop_table
irremove_column
metodai dabar yra atvirkštiniai, jei pateikiama reikalinga informacija.remove_column
metodas anksčiau priimdavo kelis stulpelių pavadinimus; vietoje to naudokiteremove_columns
(kuris negali būti atstatytas).change_table
metodas taip pat yra atvirkštinis, jei jo bloke nėra kviečiamiremove
,change
archange_default
metodai.- Naujas
reversible
metodas leidžia nurodyti kodą, kuris bus vykdomas migracijos metu į priekį arba atgal. Žr. Migracijos vadovą - Naujas
revert
metodas atstatys visą migraciją arba duotą bloką. Jei migruojama atgal, duota migracija / blokas bus vykdomas įprastai. Žr. Migracijos vadovą
Pridedama palaikymas PostgreSQL masyvo tipo. Bet koks duomenų tipas gali būti naudojamas sukurti masyvo stulpelį, su visišku migracijos ir schemos išmetimo palaikymu.
Pridėkite
Relation#load
metodą, skirtą išreiškiamai įkelti įrašą ir grąžintiself
.Model.all
dabar grąžinaActiveRecord::Relation
, o ne įrašų masyvą. Jei tikrai norite gauti masyvą, naudokiteRelation#to_a
. Kai kuriuose konkrečiuose atvejuose tai gali sukelti sutrikimus atnaujinant.Pridėtas
ActiveRecord::Migration.check_pending!
, kuris iškelia klaidą, jei yra laukiančių migracijų.Pridėta palaikymas pasirinktiniams koduotojams
ActiveRecord::Store
. Dabar galite nustatyti savo pasirinktinį koduotoją taip:store :settings, accessors: [ :color, :homepage ], coder: JSON
mysql
irmysql2
prisijungimai pagal nutylėjimą nustatoSQL_MODE=STRICT_ALL_TABLES
, kad būtų išvengta tylaus duomenų praradimo. Tai galima išjungti nurodantstrict: false
savodatabase.yml
.Pašalintas IdentityMap.
Pašalintas automatinis EXPLAIN užklausų vykdymas. Parinktis
active_record.auto_explain_threshold_in_seconds
daugiau nenaudojama ir turėtų būti pašalinta.Pridedamas
ActiveRecord::NullRelation
irActiveRecord::Relation#none
, įgyvendinantys null objekto modelįRelation
klasėje.Pridėtas
create_join_table
migracijos pagalbininkas, skirtas sukurti HABTM jungimo lenteles.Leidžiama kurti PostgreSQL hstore įrašus.
10.2 Pasenusios funkcijos
Pasenusi senojo stiliaus hash pagrindu paremta paieškos API. Tai reiškia, kad metodai, kurie anksčiau priėmė "paieškos parinktis", to jau nebedaro.
Visi dinaminiai metodai, išskyrus
find_by_...
irfind_by_...!
, yra pasenusi. Čia pateikiama, kaip galite pertvarkyti kodą:find_all_by_...
galima pertvarkyti naudojantwhere(...)
.find_last_by_...
galima pertvarkyti naudojantwhere(...).last
.scoped_by_...
galima pertvarkyti naudojantwhere(...)
.find_or_initialize_by_...
galima pertvarkyti naudojantfind_or_initialize_by(...)
.find_or_create_by_...
galima pertvarkyti naudojantfind_or_create_by(...)
.find_or_create_by_...!
galima pertvarkyti naudojantfind_or_create_by!(...)
.
11 Ačiū
Žr. visą sąrašą Rails prisidėjusių asmenų už daugelį valandų, kurias jie praleido kurdami Rails, stabilų ir patikimą karkasą. Kudos visiems jiems.
Atsiliepimai
Jūs esate skatinami padėti pagerinti šio vadovo kokybę.
Prašome prisidėti, jei pastebite rašybos klaidų ar faktinių klaidų. Norėdami pradėti, galite perskaityti mūsų dokumentacijos prisidėjimo skyrių.
Taip pat gali būti nepilnos informacijos arba informacijos, kuri nėra atnaujinta. Prašome pridėti bet kokią trūkstamą dokumentaciją pagrindiniam. Patikrinkite Edge vadovus pirmiausia, ar problemas jau išspręsta arba ne pagrindinėje šakoje. Patikrinkite Ruby on Rails vadovų gaires dėl stiliaus ir konvencijų.
Jei dėl kokios nors priežasties pastebite kažką, ką reikia ištaisyti, bet negalite patys tai pataisyti, prašome pranešti apie problemą.
Ir galiausiai, bet ne mažiau svarbu, bet koks diskusijos dėl Ruby on Rails dokumentacijos yra labai laukiamos oficialiame Ruby on Rails forume.