edge
Daugiau informacijos rubyonrails.org: Daugiau apie Ruby on Rails

Ruby on Rails 4.0 Išleidimo pastabos

Svarbiausios naujovės Rails 4.0:

Šios išleidimo pastabos apima tik pagrindinius pokyčius. Norėdami sužinoti apie įvairius klaidų taisymus ir pokyčius, prašome kreiptis į pakeitimų žurnalus arba peržiūrėti pakeitimų sąrašą pagrindiniame Rails saugykloje GitHub.

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

Rails 4.0

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/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škviestas html_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ą) ir X-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.

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 ir test/mailers. Taip pat pridėtos atitinkamos rake užduotys. (Pull Request)

  • Jūsų programos vykdomieji failai dabar yra bin/ kataloge. Paleiskite rake rails:update:bin, kad gautumėte bin/bundle, bin/rails ir bin/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, naudokite config.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 ir pluralize priima papildomą argumentą - lokalę.

  • Object#try dabar grąžins nil, o ne iškels NoMethodError, jei gavimo objektas neįgyvendina metodo, tačiau vis tiek galite gauti senąjį elgesį naudodami naują Object#try!.

  • String#to_date dabar iškelia ArgumentError: invalid date vietoje NoMethodError: undefined method 'div' for nil:NilClass kai pateikiamas neteisingas data. Dabar tai yra tas pats kaip ir Date.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, naudokite skip 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, naudokite Module#local_constants vietoje (kuris grąžina simbolius).

  • ActiveSupport::BufferedLogger yra pasenusi. Naudokite ActiveSupport::Logger arba žurnalistą iš Ruby standartinės bibliotekos.

  • Pasenusi assert_present ir assert_blank funkcijos, naudokite assert object.blank? ir assert 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 senosios up ir down metodai nebėra būtini.

    • drop_table ir remove_column metodai dabar yra atvirkštiniai, jei pateikiama reikalinga informacija. remove_column metodas anksčiau priimdavo kelis stulpelių pavadinimus; vietoje to naudokite remove_columns (kuris negali būti atstatytas). change_table metodas taip pat yra atvirkštinis, jei jo bloke nėra kviečiami remove, change ar change_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ąžinti self.

  • Model.all dabar grąžina ActiveRecord::Relation, o ne įrašų masyvą. Jei tikrai norite gauti masyvą, naudokite Relation#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 ir mysql2 prisijungimai pagal nutylėjimą nustato SQL_MODE=STRICT_ALL_TABLES, kad būtų išvengta tylaus duomenų praradimo. Tai galima išjungti nurodant strict: false savo database.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 ir ActiveRecord::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_... ir find_by_...!, yra pasenusi. Čia pateikiama, kaip galite pertvarkyti kodą:

    • find_all_by_... galima pertvarkyti naudojant where(...).
    • find_last_by_... galima pertvarkyti naudojant where(...).last.
    • scoped_by_... galima pertvarkyti naudojant where(...).
    • find_or_initialize_by_... galima pertvarkyti naudojant find_or_initialize_by(...).
    • find_or_create_by_... galima pertvarkyti naudojant find_or_create_by(...).
    • find_or_create_by_...! galima pertvarkyti naudojant find_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.