Cześć.
Zaczynam z Ruby i sukcesywnie przechodzę przykłady z książką:
“Agile Web Development with Rails, 4th Edition, Rails 3.2” - Ruby S., Thomas D., Heinemeier Hansson D.
i niestety zatrzymałem się na połączeniu z bazą danych.
Próbuję połączyć się z bazą Oracle zainstalowaną lokalnie na komputerze. Znalazłem kilka instrukcji i sposobów, ale zgodnie z zaleceniem autorów chciałbym skorzystać z konfiguracji zapisanej w ‘config/database.yml’, zawartość mojego pliku:
Po edycji database.yml spróbowałem wygenerować scaffold poleceniem:
depot> rails db
Komunikat zwrotny jest następujący:
c:\Ruby22\Home\depot>rails db
Couldn’t find database client: sqlite3, sqlite3.exe. Check your $PATH and try again.
Wygląda na to, że pomimo zmienionego pliku database.yml Rails szuka bazy sqlite, które nie instalowałem.
Mam prośbę o wskazówkę, gdzie szukać bo utknąłem.
Z góry dzięki za wszelką pomoc.
Tak. Wcześniej wszystkie środowiska przestawiłem na Oracle, ale było tak samo. W tej chwili database.yml wygląda tak jak wkleiłem, czyli jest tylko sekcja development:
Zrestartowałem server, zrestartowałem system i jest poprawa. Znaczy inny komunikat:
DEPRECATION WARNING: Passing a string to ActiveRecord::Base.establish_connection for a configuration lookup is deprecated, please pass a symbol (:oracle_enhanced) instead. (called from require at bin/rails:4)
C:/Ruby22/lib/ruby/gems/2.2.0/gems/activerecord-4.2.5/lib/active_record/connection_adapters/connection_specification.rb:248:in `resolve_symbol_connection’: ‘oracle_enhanced’ database is not configured. Available: [“development”, “adapter”,“database”, “username”, “password”] (ActiveRecord::AdapterNotSpecified)
Czuję, że jest poprawa, ale co z tym zrobić nie wiem
Pierwszy problem rozwiązany. Błąd był we wcięciach w pliku database.yml
Oznaczenie środowiska zaczyna wiersz bez spacji, parametry w każdej linii poniżej poniżej mają dwie spacje na początku, czyli powinno być:
cpu>rake db:migrate
rake aborted!
LoadError: Could not load ‘active_record/connection_adapters/oracle_enhanced_adapter’. Make sure that the adapter in config/database.yml is valid. If you use an adapter other than ‘mysql’, ‘mysql2’, ‘postgresql’ or ‘sqlite3’ add the necessary adapter gem to the Gemfile.
LoadError: cannot load such file – active_record/connection_adapters/oracle_enhanced_adapter
Tasks: TOP => db:migrate => db:load_config
(See full trace by running task with --trace)
Nie nie wykonałem i przyznam, że nie znalazłem instrukcji gdzie było podane to poleceni.
Dzięki. Faktycznie instalacja nie była skończona i teraz już jest.
Komunikat błędu trochę się zmienił:
cpu>rake db:migrate
rake aborted!
LoadError: Could not load ‘active_record/connection_adapters/oracle_enhanced_adapter’. Make sure that the adapter in config/database.yml is valid. If you use an adapter other than ‘mysql’, ‘mysql2’, ‘postgresql’ or ‘sqlite3’ add the necessary adapter gem to the Gemfile.
LoadError: cannot load such file – active_record/connection_adapters/oracle_enhanced_adapter
Tasks: TOP => db:migrate => db:load_config
(See full trace by running task with --trace)
Nie mam w gemfile wpisu: gem ‘activerecord-oracle_enhanced-adapter’
OK, dodałem wpis do gemfile.
Komunikat znowu się zmienił:
cpu>rake db:migrate
rake aborted!
LoadError: ERROR: ‘cannot load such file – oci8’. ActiveRecord oracle_enhanced adapter could not load ruby-oci8 library. You may need install ruby-oci8 gem.
C:/Ruby22/Home/depot/Rakefile:6:in <top (required)>' LoadError: cannot load such file -- oci8 C:/Ruby22/Home/depot/Rakefile:6:in<top (required)>’
(See full trace by running task with --trace)
Zainstalowałem ruby-oci8 za pomocą gem’a a następnie wydałem polecenie bundle install.
Potem dla pewności sprawdziłem poleceniem > bundle show ruby-oci8
i otrzymałem wynik:
cpu>bundle show ruby-oci8
Could not find gem ‘ruby-oci8’.
Wygląda, że jestem naprawdę blisko rozwiązania problemu. Skorzystałem z opisu konfiguracji połączenia i ustawienia pliku gemfile ze strony enter link description here
Teraz już TNS odpowiedział błędem, więc zakładam że zapukałem do bazy
Zainstalować i dodać gemy do projektu (zbundlować) przez polecenie: bundle install
Ty tylko robisz: gem install nazwa_gemu
A gem install tylko instaluje gem “globalnie” dla danej wersji Rubiego. Ale nie powoduje że w jakiś magiczny sposób twoja aplikacja może go używać. Z Railsami jest troszkę inaczej, musisz wyraźnie w pliku gemfile wpisać dokładnie te gem’y które chcesz używać, potem zbundlować je poleceniem bundle. I dopiero wtedy railsy będą używać tych gemów.
Bundler w dużym skrócie czyta plik gemfile, a następnie na jego podstaw instaluje każdy gem wraz zależnościami i zapisuje co i w jakiej wersji jest zainstalowane do gemfile.lock. Potem jak server startuje to bundler na podstawie tego pliku jest wstanie bez problemu wczytać sobie wszystkie odpowiednie pliki i pozwolić po prostu railsom działać. Jeżeli w pliku gemfile nie będzie odpowiedniego wpisu, albo nie wykonasz po jego zmianie “bundle” to wtedy przy uruchamianiu servera bundler nie wczyta odpowiednich pakietów i przy próbie ich użycia wywali błąd taki jak np. te które ty dostajesz.
Nie założę się, ale chyba w każdym w miarę sensownym tutorialu do railsów jest napisane co to gemfile i bundler. Może warto było by, żebyś jakiś taki prosty tutorial przerobił, wtedy wiele rzeczy jest naprawdę jaśniejszych.
Dziękuję za pomoc - działa.
Ostatni problem z TNS polegał na tym, że wywaliła się baza czego nie zauważyłem, po podniesieniu bazy wszystko śmiga
Podsumowując, już na marginesie, to niestety tutoriale nie opisują do czego służą i jaką rolę pełnią poszczególne narzędzia/moduły. Książka z której korzystam odsyła w tym celu do strony rubyforge.org, ale niestety ta nie działa…
Tak czy inaczej Wasze wpisy bardzo mi pomogły zrozumieć co do czego służy.
DZIĘKUJĘ.