Jak zainstalować railsy?

Dlaczego w systemach uniksowych typu Slackware, nie mogę zainstalować railsów za pomocą tego systemowego Ruby powiedzmy w wersji 3.1? Tylko muszę ściągać jakieś skrypty rvm, rbenv?
Nawet gdyby wersja Ruby 3.1 nie wspierała railsów w nowszych wersjach mi wystarczy ta wersja 7.0 którą wspiera. Mogę poczekać aż mój system zaktualizuje Ruby i railsy do wersji 3.2. To jest jakoś tak głupio zrobione że railsy muszą być zainstalowane przez rvm lub rbenv inaczej wyskakują jakieś errory.
Pythona nie muszę pobierać za pomocą skryptów, nawet stara wersja systemowa zainstaluje mi pip i najnowszą wersje Django lub Flask.

Otóż nie muszą. Nie mam teraz pod ręką takiego systemu, ale jedynie co może wejść w drogę to fakt, że polecenie gem install rails będzie chciało zainstalować gemy w katalogu systemowym, więc potrzebne będzie sudo (tak było kiedyś, być może zostało to zmienione i teraz domyślnie instaluje w katalogu domowym użytkownika).

rvm, rbenv są tak popularne gdyż w praktyce chcesz mieć pewność jakiej wersji rubiego używasz i uniezależnić się od tego kiedy Twój system zaproponuje (jeśli w ogóle) Ci jego aktualizację.

1 Like

Bez sudo wyskakuje błąd przy poleceniu gem install rails

Fetching actioncable-7.0.4.1.gem
ERROR:  While executing gem ... (Gem::FilePermissionError)
    You don't have write permissions for the /var/lib/gems/3.1.0 directory.

Z sudo wyskakuje dłuższy błąd.

Successfully installed websocket-extensions-0.1.5
Building native extensions. This could take a while...
ERROR:  Error installing rails:
	ERROR: Failed to build gem native extension.

    current directory: /var/lib/gems/3.1.0/gems/websocket-driver-0.7.5/ext/websocket-driver
/usr/bin/ruby3.1 -I /usr/lib/ruby/vendor_ruby -r ./siteconf20230119-16608-ftwl2w.rb extconf.rb
mkmf.rb can't find header files for ruby at /usr/lib/ruby/include/ruby.h

You might have to install separate package for the ruby development
environment, ruby-dev or ruby-devel for example.

extconf failed, exit code 1

Pomogło: install ruby-dev zlib1g-dev liblzma-dev

Czy to jest rozsądne zezwalać na instalację w katalogu systemowym, co jakiś czas słyszę o malware w RubyGems. Przecież nikt nie będzie sprawdzał kodu każdego gema, więc trzeba być ostrożnym i instalować jak najmniej gemów? Ewentualnie tylko te najbardziej popularne i sprawdzone?

Polecenia dostarczane przez gemy oraz sam kod powinno się odpalać bez uprawnień roota. W takim przypadku nie widzę różnicy czy taki malware miałby być zainstalowany w katalogu systemowym czy użytkownika. Co więcej, w railsach i tak będziesz musiał użyć bundlera i z tego co mi się wydaje, to on teraz i tak domyślnie instaluje gemy w katalogu domowych. Także tylko railsy i ich zależności będziesz mieć zainstalowane systemowo. Jeśli tak Ci wygodniej to ja nie widzę w tym problemu.

możesz użyć uniwersalnego managera wersji oprogramowania:

Przyda się do np. do node’a

Mimo wszystko zachęcam do użycia rbenv/rvm. To jest standard w świecie RoR i ostatecznie Twoje życie będzie łatwiejsze :slight_smile: