2014-01-21 9 views
9

Wenn ich eine neue Rails-4-Projekt generieren, sieht die Gemfile wie folgt aus:Warum sperren Schienen bestimmte Edelsteine ​​nicht zu einer bestimmten Version?

source 'https://rubygems.org' 

# Bundle edge Rails instead: gem 'rails', github: 'rails/rails' 
gem 'rails', '4.0.2' 

# Use postgresql as the database for Active Record 
gem 'pg' 

# Use SCSS for stylesheets 
gem 'sass-rails', '~> 4.0.0' 

# Use Uglifier as compressor for JavaScript assets 
gem 'uglifier', '>= 1.3.0' 

# Use CoffeeScript for .js.coffee assets and views 
gem 'coffee-rails', '~> 4.0.0' 

# Use jquery as the JavaScript library 
gem 'jquery-rails' 

# Turbolinks makes following links in your web application faster. Read more: https://github.com/rails/turbolinks 
gem 'turbolinks' 

# Build JSON APIs with ease. Read more: https://github.com/rails/jbuilder 
gem 'jbuilder', '~> 1.2' 

group :doc do 
    # bundle exec rake doc:rails generates the API under doc/api. 
    gem 'sdoc', require: false 
end 

Warum nicht Rails die Versionen für pg, jquery-rails und turbolinks sperren?

Antwort

4

ich this comment von einer Github Ausgabe denke über rails_app_composer könnte einen Teil der Überlegung dahinter sein:

Wenn die gemfiles verwenden Absolute Version Constraint waren (der gleich Operator), jeder, der geklonten oder ein Beispiel erzeugt App könnte sicher sein, dass die Anwendung immer als gebaut ausgeführt wird. Aber wir würden nicht so schnell über Probleme lernen. Mit den optimistischen Versionsbeschränkungen erfahren wir bald nach der Veröffentlichung von inkompatiblen Edelsteinversionen Probleme mit Edelsteinen.

Zum Beispiel hat kürzlich Devise Version 2.2.0 die Standard-Passwortlänge geändert. Alle Beispielanwendungen waren fehlerhaft, weil die Beispielpasswörter in Datenbankinitialisierungsdateien und -tests zu kurz waren. Innerhalb eines Tages (oder zwei) nach der Veröffentlichung von Devise 2.2.0 war mir das Problem bekannt, da mehrere GitHub-Probleme geöffnet wurden.

Jetzt überlegen Sie, ob ich die Gemfiles zu Devise 2.1.0 mit Absolute Version Constraint oder Devise 2.1.x mit Pessimistic Version Constraint gesperrt hatte. Irgendwann würde ich die Fehlerberichte erhalten, aber nur, wenn jemand neugierig wurde und beschloss, neuere Versionen von Devise auszuprobieren. Die Fehlerberichte würden ankommen, aber langsam und nicht wie ein Schwarm. Wenn ich einen isolierten Fehlerbericht sehe, ist es schwierig zu wissen, ob es sich um ein idiosynkratisches Problem oder einen Anwendungsfehler handelt. Wenn ich einen Schwarm verwandter Probleme sehe, ist es leicht zu erraten, dass etwas nicht stimmt.

Dies ist besonders im Fall von Turbolinks Sinn, da es eine neue Funktion ist. Der Autor goes on to say jedoch, dass er am Ende "Versionsnummern aus dem Gemfile entfernt", also machen Sie das, was Sie wollen.