Cześć,
mam problem z Railsami, który może Wam się wydać trywialny, ale opiszę poniżej o co chodzi.
Zestaw, który używam na co dzień:
Ubuntu 18.04
ruby-2.4.0
Rails 5.2.1 (kilka dni temu była aktualizacja do 5.2.2.1)
Od kilku dni miałem problem z mysql, ale ogarnąłem i działa. Zauważyłem natomiast, że na localu przestały mi działać wszystkie projekty. Przy odpalaniu projektu, który napisany był w Rails 5.2.1 wyskakuje mi taki błąd:
/home/mirek/.rvm/gems/ruby-2.4.0/gems/railties-5.2.1/lib/rails/railtie/configuration.rb:97:in method_missing': undefined methodactive_storage’ for #Rails::Application::Configuration:0x00564a221eeae8 (NoMethodError)
Nie działają też komendy typu: rails c, a rails -T wywala mocno okrojoną listę dostępnych poleceń.
rails aborted! Don’t know how to build task ‘db:schema:dump’
Sprawdziłem też czy przy innych wersjach Railsów podobny błąd także będzie się pojawiał i jest tak samo. Szukam rozwiązania w G. ale póki co nie udało mi się.
Prawdę mówiąc to nic nie chciałem zmieniać, a jedyne co robiłem to bundle update, kiedy nowy projekt nie chciał wystartować i railsy same zasugerowały bundle update. Do tej pory wszystko dobrze działało. Kilka dni temu była spora paczka aktualizacji Ubuntu, ale nie wiem czy to może mieć coś wspólnego z tym przypadkiem.
diff # Store uploaded files on the local file system (see config/storage.yml for options) # config.active_storage.service = :local Don't care if the mailer can't send. config.action_mailer.raise_delivery_errors = false
@@ -38,12 +35,6 @@ Print deprecation notices to the Rails logger. config.active_support.deprecation = :log
Raise an error on page load if there are pending migrations. config.active_record.migration_error = :page_load
Highlight code that triggered database queries in logs. config.active_record.verbose_query_logs = true
Debug mode disables concatenation and preprocessing of assets. This option may cause significant delays in view rendering with a large number of complex assets.
Używam rbenv zamiast rvm, ale dziwne mi się wydaje, że problem miałby wynikać z tego, że jest jeden globalny gemset. Rbenv nie ma gemsetów, wszystkie trafiają do jednego worka i nie powoduje to żadnego problemu. Dlaczego? Bo izolację zapewnia bundler i absolutnie nie jest problemem istnienie różnych wersji gemów. Gemsety miały sens za czasów gdy nie było bundlera. W takim układzie to się wydaje dziwne, że wszystkie projekty przestały działać. Sugeruje, że ktoś/coś namieszało w strukturze zainstalowanych gemów. Możliwe, że instrukcja od @DarkCoin przyniesie skutek, ale to może być tylko przypadkowe. Jeśli w każdym projekcie używasz bundlera i masz plik Gemfile.lock to mógłbyś spokojnie odinstalować całą wersję rubiego (wraz z gemami) i zainstalować ponownie. Odpalenie bundle install w projekcie zainstaluje brakujące gemy.
plik .ruby-gemset dodaję na początku do każdego projektu - dla pewności sprawdziłem i wszystkie mają
zrobiłem - usunęły się wszystkie wersje Ruby
zainstalowałem Ruby w wersji 2.4.0
próbuję póki co na jednym projekcie - zrobiłem bundle (musiałem doinstalować bundlera - gem install bundler).
W Gemfile podana jest wersja Rails gem 'rails', '~> 5.2.1'
Kiedy chcę sprawdzić wersję Railsów w projekcie rails -v:
Ignoring bindex-0.5.0 because its extensions are not built. Try: gem pristine bindex --version 0.5.0
Ignoring bootsnap-1.4.1 because its extensions are not built. Try: gem pristine bootsnap --version 1.4.1
Ignoring bootsnap-1.3.2 because its extensions are not built. Try: gem pristine bootsnap --version 1.3.2
Ignoring byebug-11.0.1 because its extensions are not built. Try: gem pristine byebug --version 11.0.1
Ignoring byebug-10.0.2 because its extensions are not built. Try: gem pristine byebug --version 10.0.2
Ignoring executable-hooks-1.6.0 because its extensions are not built. Try: gem pristine executable-hooks --version 1.6.0
Ignoring ffi-1.10.0 because its extensions are not built. Try: gem pristine ffi --version 1.10.0
Ignoring ffi-1.9.25 because its extensions are not built. Try: gem pristine ffi --version 1.9.25
Ignoring gem-wrappers-1.4.0 because its extensions are not built. Try: gem pristine gem-wrappers --version 1.4.0
Ignoring msgpack-1.2.9 because its extensions are not built. Try: gem pristine msgpack --version 1.2.9
Ignoring msgpack-1.2.4 because its extensions are not built. Try: gem pristine msgpack --version 1.2.4
Ignoring nio4r-2.3.1 because its extensions are not built. Try: gem pristine nio4r --version 2.3.1
Ignoring nokogiri-1.10.1 because its extensions are not built. Try: gem pristine nokogiri --version 1.10.1
Ignoring nokogiri-1.8.4 because its extensions are not built. Try: gem pristine nokogiri --version 1.8.4
Ignoring pg-1.1.4 because its extensions are not built. Try: gem pristine pg --version 1.1.4
Ignoring pg-1.1.3 because its extensions are not built. Try: gem pristine pg --version 1.1.3
Ignoring puma-3.12.1 because its extensions are not built. Try: gem pristine puma --version 3.12.1
Ignoring puma-3.12.0 because its extensions are not built. Try: gem pristine puma --version 3.12.0
Ignoring sassc-2.0.1 because its extensions are not built. Try: gem pristine sassc --version 2.0.1
Ignoring websocket-driver-0.7.0 because its extensions are not built. Try: gem pristine websocket-driver --version 0.7.0
Traceback (most recent call last):
4: from bin/rails:5:in <main>' 3: from bin/rails:5:inload’
2: from /home/mirek/ror/medical_clinic/bin/spring:9:in <top (required)>' 1: from /usr/lib/ruby/2.5.0/rubygems/core_ext/kernel_require.rb:59:inrequire’
/usr/lib/ruby/2.5.0/rubygems/core_ext/kernel_require.rb:59:in `require’: cannot load such file – bundler (LoadError)
Dzięki za chęci pomocy i podpowiedzi.
Mimo wszystko po braku efektów finalnie postawiłem na nowo Ubuntu 18.04, skonfigurowałem całe środowisko pracy i wszystko działa jak należy. Zamiast rvm używam teraz rbenv.