Jak udostępnić zewnętrzną bazę danych dla widoków?

8

Tutaj i w innych miejscach jest wiele dyskusji na temat korzystania z zewnętrznych baz danych w Drupal. Z tego zorientowałem się:

  • Najlepszym sposobem pracy z danymi w tabeli bazy danych jest użycie modułu Widoki. Zainstalowałem to i zacząłem go używać i stwierdziłem, że świetnie nadaje się do pracy z tabelą dodaną do bazy danych witryny.
  • Najłatwiejszym sposobem, aby Widoki działały z tabelą, która nie została utworzona przez Drupal, jest moduł danych. Ten moduł traktuje dowolną tabelę w bazie danych witryny, która nie jest używana przez Drupal, jako „tablicę osieroconą” i umożliwia jej „adaptację” jednym kliknięciem.
  • Moduł „Kreator tabel” najwyraźniej zapewnia to w przypadku tabel, które nie znajdują się w bazie danych witryny. Ale ten moduł nie jest dostępny dla Drupala 7.
  • Plik „settings.php” w sekcji „Ustawienia bazy danych” zawiera szczegółową dokumentację dotyczącą definiowania dodatkowych baz danych, z którymi witryna może współpracować. Ale gdy baza danych jest zdefiniowana w ten sposób, jej tabele nie pojawiają się na liście tabel osieroconych w module Data.

Zmiana, którą wprowadziłem w definicji bazy danych w pliku „settings.php” jednej z moich witryn to:

$databases = array ( 'default' => array ('default' => array ( 'database' => 'db_local', 'username' => 'db_local', 'password' => '_________', 'host' => 'localhost', 'port' => '', 'driver' => 'mysql', 'prefix' => '', ), ), 'extra' => array ('default' => array ( 'database' => 'db__extra', 'username' => 'db_admin', 'password' => '_________, 'host' => 'localhost', 'port' => '', 'driver' => 'mysql', 'prefix' => '', ), ), );

Mam tabelę, której chcę używać w więcej niż jednej witrynie w mojej instalacji obejmującej wiele witryn. Oznacza to, że muszę mieć tabelę w bazie danych, która jest dostępna dla każdej witryny. Według lektury, którą zrobiłem, moje opcje to:

  1. Najlepiej, jeśli to możliwe: dowiedz się, że istnieje sposób, aby moduł Data rozpoznał tabele w dodatkowej bazie danych zdefiniowanej w pliku „settings.php”, aby mógł je przyjąć.
  2. Użyj prefiksów tabeli, aby umożliwić wszystkim stronom korzystanie z jednej bazy danych.
  3. Moduł „ Raporty Forena ” wydawał się robić dokładnie to, czego potrzebuję, ale kiedy go zainstalowałem, nie mogłem go uruchomić. I złożony problem 2475645 i nie można zrobić dużo więcej tam, chyba że istnieje poprawka dla tego problemu.
  4. Napisz własny moduł, aby dać widokom dostęp do dodatkowej bazy danych zdefiniowanej w „settings.php”.
  5. Zainstaluj Drupal 6 za pomocą Kreatora tabel i użyj go, aby uzyskać Widoki, aby zobaczyć moją tabelę zewnętrzną, a następnie jakoś weź wynik tego i umieść go w Drupal 7. (Zasugerowano to w niektórych postach).
  6. Postępuj zgodnie z procedurą opisaną w https://drupal.stackexchange.com/a/3321/45991 , która rozpoczyna się od zainstalowania poprawki i wydaje się, że wymaga również utworzenia własnego modułu.
  7. Patrzyłem również na moduły Kanały, Kanały SQL, Widoki XML Backend i Migracja, ale żaden z nich nie powiedział, że mogą podłączyć zewnętrzną bazę danych do Widoki. Czy coś brakuje? Czy jedno z nich jest właściwym rozwiązaniem?

Opcja 2 nie jest praktyczna, ponieważ spowodowałaby powstanie ogromnej bazy danych z setkami tabel, które byłyby bardzo trudne w zarządzaniu. Robię duże postępy w rozpoczynaniu pracy z Drupalem, ale nie czuję się dobrze z zadaniem 4, 5 lub 6. Czy jest jakaś możliwość, żeby działała opcja 1? Czy jest jakiś inny sposób, aby Widoki działały z tabelą poza bazą danych witryny bez możliwości napisania własnego modułu?

Dwa dodatkowe szczegóły: Pierwszy stół, z którym muszę pracować, jest dość duży, ponad 6000 wierszy i około 20 kolumn. Nie ma zamiaru udostępniać odwiedzającym witryny dostępu do bazy danych, z wyjątkiem informacji z niej pochodzących dotyczących zawartości strony.

Dzięki za pomoc.

NewSites
źródło

Odpowiedzi:

2

Myślę, że moduł Forena robi dokładnie to, czego potrzebujesz . Twój problem z instalacją to tylko prośba o wsparcie, a nie coś, co wymaga „naprawy”. Po rozwiązaniu problemu będziesz mieć nawet możliwość skorzystania z integracji widoków tak lub nie.

Utworzony przez ciebie problem Forena jest bardzo dobrze udokumentowany (świetna robota!). Ale nigdzie nie mówi nic o uprawnieniach Ci udzielone (co sprawia, że można uwierzyć, że brakuje niektórych wymaganych uprawnień). Oto próba rozwiązania tego:

  • Czy możesz krótko wyjaśnić, które z (wymaganych) zezwoleń związanych z Forena przyznałeś?

  • Wymagane uprawnienia Forena są wyjaśnione w Przewodniku instalacji dołączonym do Forena ? Do waszej wiadomości: oto cytat (części):

    Forena pozwala na dużą szczegółowość, jeśli chodzi o raportowanie autoryzacji związanych z raportowaniem, za pomocą standardowych narzędzi administracyjnych Drupal w celu przyznania uprawnień do ról. Lista uprawnień Drupal związanych z Foreną, które można przyznać, może początkowo być nieco przytłaczająca. Ponieważ istnieją 3 wpisy dla każdego zdefiniowanego źródła danych, a wanilia Forena już zawiera 3 źródła danych.

    Aby pobrać ten przewodnik we własnej witrynie, przejdź do /reports/help.setup

Te uprawnienia dostępu do „danych” zostały pierwotnie wstrzymane. Jest tak z założenia, ponieważ Forena jest również dość wrażliwa na wszystko, co wiąże się z udzielaniem dostępu do danych za pośrednictwem Forena. Nie chciałbyś, aby po prostu instalując i konfigurując Forena (bez uprawnień administratora), możesz użyć go jako obejścia dostępu do zabezpieczonych danych.

Należy również pamiętać, że oprócz uprawnień na poziomie całego źródła danych, istnieje możliwość dalszego udoskonalenia wymaganych uprawnień dla określonych bloków danych (= niestandardowe zapytania SQL). Aby to zrobić, po prostu określ wymagane uprawnienia (Drupal) w instrukcji SQL (szczegóły składni są zawarte w przewodnikach Forena). Typowym przykładem tego jest zapewnienie dostępu do kolumn zawierających poufne dane.

Ujawnienie: Jestem CO -maintainer tego modułu,
mam nadzieję, że to nie narusza witryny politykę w autopromocji .

Pierre.Vriens
źródło
Dziękuję Ci za to. Nie zauważyłem, kiedy po raz pierwszy przeszedłem Instalatora, że ​​było pięć uprawnień, które nie zostały przyznane nikomu. Teraz przyznałem je Administratorowi (tj. Mnie). Dokument instalacyjny nie wyjaśnia, dlaczego te uprawnienia są pierwotnie wstrzymywane i czy istnieje powód, aby nie udzielać ich administratorowi. Jednak teraz mam te źródła danych, więc to rozwiązało ten problem. Czy istnieje powód, dla którego odpowiedziałeś tutaj zamiast w przesłanym przeze mnie problemie?
NewSites
Wspaniale czytać postępy! W jakiś sposób rekompensuje to „negatywne zdanie” mojej odpowiedzi ... FYI: Odpowiedziałem też teraz za pośrednictwem kolejki problemów. Czy teraz, gdy „to rozwiązało problem”, czy to oznacza, że ​​uważasz Forenę za „odpowiedź” na twoje pytanie (czego nie było jeszcze, jak w punkcie 3 PO)? FYI: Spróbuję zaktualizować swoją odpowiedź tutaj, aby krótko wyjaśnić „dlaczego pierwotnie te uprawnienia zostały wstrzymane”, co jest dobrym dodatkowym pytaniem!
Pierre.Vriens
To nie ja obniżyłem twoją odpowiedź. Akceptuję teraz twoją odpowiedź jako <u> i </u> i głosowałem za nią (co niestety tylko przywraca ją do zera).
NewSites
Hm, nie zakładałem, że @NewSites ma zdanie negatywne, właściwie nauczyłem się żyć z opiniami negatywnymi. Ja osobiście nie lubię głosowania w dół i ignoruję te, w których nie ma komentarza, który mógłby je jakoś wyjaśnić. Ale oczywiście „upvoting” i „akceptacja” są bardzo mile widziane. I oczywiście wiedząc, że jest jeszcze jeden użytkownik Drupala, który wydaje się, że odkrył teraz Forenę, gotowe! Upewnij się, aby zgłosić problemy (wsparcie?) W odpowiednich przypadkach (aby zobaczyć także wsparcie w pracy ...).
Pierre.Vriens
2

Zrobiłem to z powodzeniem na kilka różnych sposobów:

Użyj widoku SQL, aby utworzyć wirtualną tabelę, db_localktóra odwołuje się do odpowiedniej tabeli w db__extra. Zapytanie do utworzenia, które wyglądałoby mniej więcej tak:

USE db_local; CREATE VIEW some_table AS SELECT * FROM db__extra.some_table;

Następnie możesz odwołać się do tego widoku SQL, tak jakby był on rodzimą tabelą w bazie danych Drupal, i nie musisz wcale dodawać zewnętrznej bazy danych w pliku settings.php. Pamiętaj, że może to nie być zgodne z modułem danych (patrz https://www.drupal.org/node/1973806 ), ale powinieneś być w stanie opisać widok SQL do modułu widoków Drupal poprzez wdrożenie hook_views_data()i przestać używać modułu danych .

Oto kolejna możliwość: użyj selektywnych prefiksów tabeli, aby nakłonić Drupala do przepisania {some_table} do db__extra.some_table. To nie to samo, co prefiksowanie tabel Drupala.

Twoje $databasesustawienie wygląda następująco:

$databases = array ( 'default' => array ('default' => array ( 'database' => 'db_local', 'username' => 'db_local', 'password' => '_________', 'host' => 'localhost', 'port' => '', 'driver' => 'mysql', 'prefix' => array( 'some_table' => 'db__extra.', ), )) );

Ponownie nie jestem pewien, czy jest to zgodne z modułem danych, ponieważ go nie używam. Ale jeśli implementujesz hook_views_data()siebie, powinno to działać z widokami.

Les Lim
źródło
Mówisz w obu metodach, że muszę zaimplementować <code> hook_views_data () </code>. Czy to nie wymaga napisania modułu? W każdym razie próbowałem definicji bazy danych w drugiej metodzie. Nie spowodowało to pojawienia się tabeli w „db_extra” na liście osieroconych tabel modułu danych. W pierwszej metodzie, gdzie mam umieścić zasugerowane zapytanie (jeśli nie w niestandardowym module)?
NewSites
Jeśli tworzysz widok SQL, musisz raz uruchomić zapytanie CREATE VIEW w MySQL. Nie trzeba go ponownie uruchamiać.
Les Lim
Przepraszam, wciąż nie rozumiem. Gdzie chcesz, żebym uruchomił to zapytanie? W phpMyAdmin? Czy da mi to coś, czego mogę użyć w Widokach? Szukałem „widoku SQL” na Drupal.org i dostałem drupal.org/project/sql_views , który nie ma pobrania produkcyjnego i którego dokument na drupal.org/node/2458947 mówi, że muszę zaimplementować hook (co, jak zakładam, oznacza pisanie moduł), aby poinformować moduł Widoki o moim widoku SQL. Wygląda więc na to, że to, co sugerujesz, wymaga napisania modułu (na co po prostu nie czuję się gotowy), a jeśli nie, po prostu nie rozumiem, co mam ci zrobić.
NewSites