Sie wurden jeweils von verschiedenen Teams zu unterschiedlichen Zeiten entwickelt und werden von unterschiedlicher Software verwendet.
Eine Rubin-Version in der Gemfile ist eine feature in bundler.
Da das Gemfile hauptsächlich nur von Bundler verwendet wird, wird es hauptsächlich nur Dinge bewirken, wenn Sie den Bundler ausführen - mit bundle exec
oder Software (wie Rails), die Bundler automatisch für Sie auslöst. Der Effekt besteht einfach darin, Fehler zu machen und die Ausführung zu verweigern, wenn Sie nicht die angegebene Version von ruby verwenden. Es ist eine Voraussetzung - unter diesem Rubin laufen, oder ich werde einen Fehler werfen, der Sie warnt, dass Sie unter dem falschen Rubin laufen.
Allerdings heroku also pays attention zu der Version in der Gemfile angegeben, und wird unter dieser Version ausgeführt werden. Heroku entschied sich, das Feature auch in Bundler zu verwenden. Aber die meisten anderen Programme auf Ihrer Workstation oder sogar travis verwenden diese Konvention nicht. (Mit Travis können Sie Ihre .travis.yml-ENV bearbeiten, um die Ruby-Version für die Verwendung anzugeben.)
Das Feature in bundler wurde Manager 2012
in Bündler 1.2 im August eingeführt
Die .ruby-version Datei wurde zuerst von rvm eingeführt, dem ersten Ruby-Version. Wenn Sie rvm verwenden und in eine Projektverknüpfung mit einer Datei .ruby-version
wechseln, wechselt rvm automatisch Ihre Shell zur Verwendung der angegebenen Ruby-Version.
Ich bin mir nicht sicher, wenn rvm diese Funktion eingeführt, aber ich denke, vor der Gemfile "Ruby" -Funktion.
Da rvm es eingeführt hat, haben andere Ruby Version Switching-Software wie rbenv und chruby es auch übernommen, um das gleiche zu tun - automatisch zu der Ruby-Version wechseln, wenn Sie cd
in das Verzeichnis angegeben. Obwohl ich denke, mit Rbenv und Chruby kann beides ein optionales Feature sein.
Sie waren also verschiedene Funktionen, die von verschiedenen Softwarepaketen zu verschiedenen Zeiten eingeführt und unterstützt wurden, wobei etwas anderes gemacht wurde.
Ich stimme zu, es wäre ärgerlich, beide zu verwalten und sie synchron zu halten.
Sie sind beide tatsächlich optional, Sie müssen keines verwenden. Abgesehen davon, dass du vielleicht die Gemfile-Ruby-Spezifikation für Heroku verwenden musst, um ihm mitzuteilen, welchen Ruby er ausführen soll.
Ich persönlich auch nicht verwenden. Aber wenn Sie in verschiedenen Ruby-Versionen in verschiedenen Projekten arbeiten müssen und es praktisch ist, wenn Ihr Ruby-Versionsverwalter (rvm, rbenv oder chruby) automatisch auf die richtige projektspezifische Ruby-Version umschaltet, könnte .ruby-version
nützlich sein.
Abgesehen von Heroku-Zwecken ist die Auflistung von Ruby im Gemfile meistens nur dazu da, um Fehler zu vermeiden, zum Beispiel beim Deployment. Oder eine interne automatisierte Bereitstellungs- oder CI-Umgebung könnte sie ähnlich wie Heroku verwenden, oder vielleicht haben andere Cloud-Bereitstellungsstapel sie übernommen. Ich denke, viele haben es nicht so nützlich gefunden - auch dieses würde ich nicht verwenden, bis Sie ein Problem sehen oder sehen, dass es löst. Eine Unannehmlichkeit, die manche Leute haben, wenn sie Ruby-Versionen in Gemfile auflisten, ist, dass neue Rubine immer rauskommen und du alle deine Gemfiles ständig aktualisieren musst.
Im Allgemeinen waren die letzten Jahre der Ruby-Veröffentlichungen sehr abwärtskompatibel, was die Notwendigkeit einschränkt, eine genaue Version von Ruby zu verwenden, der neueste Code wird auf dem neuesten Ruby laufen, selbst wenn Es wurde ursprünglich für einen älteren geschrieben.
Ich glaube nicht, beide Funktionen können Sie eine Reihe von Ruby-Versionen angeben, wie 2.2.*
oder was Sie haben.
Mit beiden/beiden Funktionen, verwenden Sie sie nur, wenn Sie sie brauchen oder sie nützlich finden, müssen Sie auch nicht, und es ist in Ordnung (wenn ärgerlich), beide zu verwenden, wenn Sie beide benötigen.
Da ein Gemfile Live-Ruby-Code ist, könnten Sie theoretisch Ihr Gemfile Ihre .ruby-version
-Datei lesen lassen und diesen Wert automatisch als Gemfile ruby
verwenden. Wenn du beide verwenden willst, und "wiederhole dich nicht" damit. Ich weiß nicht, ob das üblich ist, ich habe nur daran gedacht. Aber es sollte gut funktionieren.
Ich glaube, Sie brauchen nicht zu Ruby-Version in Ihrem Gemfile überhaupt angeben . –
Afaik '.ruby-Version' legt die Ruby-Version für RVM oder rbenv fest, aber Heroku nimmt zum Beispiel die Ruby-Version aus der Gemdatei ([source] (https://devcenter.heroku.com/articles/ruby-versions)) . – spickermann
Danke @spickermann, das klingt nach einer guten Idee, beides zu haben. – Todd