Problem z Ruby/Rails

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ę.

Może ktoś z Was ma jakiś pomysł i mnie oświeci?

masz RVM bez gemsetu i wszystkie projekty korzystają z jednej listy gemów poczytaj o tworzeniu gemsetów i na dev twórz sobie gemset na apkę

no i jeszcze konfiguracja apki - źródło stack exchange

# config/application.rb
require "active_storage/engine"

Hmm, każdy projekt posiada własny gemset. Natomiast z poniższą linią już próbowałem wcześniej, ale nic to nie zmienia.

no to w takim razie railsy siedzą w globalnym gemsecie przynajmniej ścieżka do gem-a nie zawiera @mygemset

/home/mirek/.rvm/gems/ruby-2.4.0/gems/railties-5.2.1/lib/rails/railtie/configuration.rb:97:in 

Jak podbiłeś railsy ? czy myślałeś o podniesieniu wersji ruby ?

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.

używasz active_storage ?

czy możesz uruchomić “procedurę” disable active storage

nie używam

zrobiłem tak jak podane, ale póki co to nic się nie zmieniło i te same błędy.

rails -T wyświetla mi takie opcje:

rails about
rails app:template
rails app:update
rails assets:clean[keep]
rails assets:clobber
rails assets:environment
rails assets:precompile
rails cache_digests:dependencies
rails cache_digests:nested_dependencies
rails dev:cache
rails initializers
rails log:clear
rails middleware
rails notes
rails notes:custom
rails restart
rails routes
rails secret
rails stats
rails test
rails test:db
rails test:system
rails time:zones[country_or_offset]
rails tmp:clear
rails tmp:create
rails yarn:install

rails app:update

zrób diff dla application.rb i zobacz co do nowego musisz przenieść, może jakiś klucz config wyleciał lub zmienił nazwę

rails app:update
identical config/boot.rb
exist config
identical config/routes.rb
identical config/application.rb
identical config/environment.rb
identical config/cable.yml
identical config/puma.rb
identical config/spring.rb
exist config/environments
conflict config/environments/development.rb
Overwrite /home/mirek/ror/simplecms/config/environments/development.rb? (enter "h" for help) [Ynaqdhm] h

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.

czyli to nie config/application.rb

  1. jeżeli masz plik config/storage.yml usuń

railtie ładuje konfiguracje i czyta klucz active_storage

  1. poszukaj frazy active_storage w projekcie i wszystkie wywołania zakomentuj - docelowo usuń

to miał być trivial ! pytanie/odpowiedź :smiling_imp:

EDIT:

a może to jest trivial

gem cleanup

zamiast rails c użyć bundle exec rails c

usunięty

w całym projekcie nie ma już nic na temat active_storage

Wiem, że można użyć bundle exec rails c, ale mimo wszystko konsola też się nie odpalała.

Zrobiłem gem cleanup i teraz serwer wystartował. Działa też rails c.

Zastanawia mnie dlaczego wszystkie projekty przestały działać na localu z dnia na dzień.

Nie mogę też nic robić z bazą danych, nawet jej utworzyć, bo nic z rails db: nie działa.

RVM już nie uzywam wiec słabym partnerem do rozmowy w temacie jestem

skoro gem cleanup częściowo pomógł

zastanawiam się:

  1. jak instalowałeś RVM i czy railsy czasem nie wylądowały w global zamiast w gemsecie
  1. jaki błąd wywala bundle exec rails db:create ?

Railsy instalowałem dość dawno, ale wygląda na to, że są globalnie, bo nawet jak jestem w katalogu poza projektami to rails -v zwraca Rails 5.2.2.1.

rails aborted!
Don't know how to build task 'db:create' (See the list of available tasks with 'rake --tasks')

/home/mirek/.rvm/gems/ruby-2.4.0/gems/railties-5.2.2.1/lib/rails/commands/rake/rake_command.rb:23:in 'block in perform'
/home/mirek/.rvm/gems/ruby-2.4.0/gems/railties-5.2.2.1/lib/rails/commands/rake/rake_command.rb:20:in 'perform'
/home/mirek/.rvm/gems/ruby-2.4.0/gems/railties-5.2.2.1/lib/rails/command.rb:48:in 'invoke'
/home/mirek/.rvm/gems/ruby-2.4.0/gems/railties-5.2.2.1/lib/rails/commands.rb:18:in '<main>'
/home/mirek/.rvm/gems/ruby-2.4.0/gems/bootsnap-1.4.1/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:21:in 'require'
/home/mirek/.rvm/gems/ruby-2.4.0/gems/bootsnap-1.4.1/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:21:in 'block in require_with_bootsnap_lfi'
/home/mirek/.rvm/gems/ruby-2.4.0/gems/bootsnap-1.4.1/lib/bootsnap/load_path_cache/loaded_features_index.rb:83:in 'register'
/home/mirek/.rvm/gems/ruby-2.4.0/gems/bootsnap-1.4.1/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:20:in 'require_with_bootsnap_lfi'
/home/mirek/.rvm/gems/ruby-2.4.0/gems/bootsnap-1.4.1/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:29:in 'require'
/home/mirek/.rvm/gems/ruby-2.4.0/gems/activesupport-5.2.2.1/lib/active_support/dependencies.rb:291:in 'block in require'
/home/mirek/.rvm/gems/ruby-2.4.0/gems/activesupport-5.2.2.1/lib/active_support/dependencies.rb:257:in 'load_dependency'
/home/mirek/.rvm/gems/ruby-2.4.0/gems/activesupport-5.2.2.1/lib/active_support/dependencies.rb:291:in 'require'
bin/rails:4:in '<main>'

prawdopodobnie wykonałeś bundle install przed postawieniem gemsetu dla projektu… zresztą rails new.... to robi domyślnie

chyba najmniejszy nakład praacy to

  1. dodać w każdym projekcie plik .ruby-gemset i nie zapominać o tym przy nowych projektach

  2. rvm implode

  3. powtórna instalacja RVM bez żadnych dodatków - o ile jeszcze go tolerujesz :wink:

  4. bundlowanie od nowa wszystkiego - w każdym projekcie bundle pod warunkiem że w katalogu projektu rvm gemset name zwróci coś co cieszy oko

domyślnie skipuj bundlera przy rails new... i odpalaj bundle dopiero jak utworzysz gemset

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.

1 Like

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.

Pozdrawiam :slight_smile: