Quepid macht die Verbesserung der Suchergebnisse Ihrer App zu einem wiederholbaren, zuverlässigen Engineering-Prozess, den das gesamte Team verstehen kann. Es geht um drei Themen:
Unsere Zusammenarbeit stinkt. Um ganzheitliche Fortschritte bei der Suche zu erzielen, ist eine intensive, funktionsübergreifende Zusammenarbeit erforderlich. Das Verfassen von E-Mails oder das Verfolgen von Suchanforderungen in Tabellenkalkulationen reicht nicht aus.
Suchtests sind schwierig Suchänderungen sind bereichsübergreifend: Die meisten Änderungen werden Probleme verursachen. Das Testen ist schwierig: Sie können nicht nach jeder Relevanzänderung Hunderte von Suchvorgängen durchführen.
Iterationen sind langsam. Es scheint unmöglich, vorwärts zu kommen. Um ein Rückwärtsrutschen zu vermeiden, ist der Fortschritt langsam. Viele geben die Suche einfach auf und berauben die Benutzer der Möglichkeit, wichtige Informationen zu finden.
Weitere Informationen finden Sie auf der Quepid-Website und im Quepid-Wiki.
Wenn Sie bereit sind, direkt loszulegen, können Sie jetzt den Hosted Quepid-Dienst nutzen oder den Installationsschritten folgen, um Ihre eigene Instanz von Quepid einzurichten.
Nachfolgend finden Sie Informationen zur Entwicklung des Quepid-Open-Source-Projekts, vor allem für Leute, die daran interessiert sind, die Möglichkeiten von Quepid zu erweitern!
Die Bereitstellung von einer bereits erstellten Maschine dauert etwa 3–4 Minuten. Die Bereitstellung von Grund auf dauert etwa 20 Minuten.
Stellen Sie sicher, dass Sie Docker installiert haben. Gehen Sie hier https://www.docker.com/community-edition#/download für Installationsanweisungen. Und die Docker-App wird gestartet.
Um mit brew zu installieren, befolgen Sie diese Schritte:
brew cask install docker
brew cask install docker-toolbox
HINWEIS: Möglicherweise erhalten Sie beim ersten Versuch eine Warnung, dass Sie Oracle vertrauen. Öffnen Sie „Systemeinstellungen“ > „Sicherheit und Datenschutz“, klicken Sie auf die Schaltfläche „Oracle zulassen“ und versuchen Sie dann erneut, Docker-Toolbox zu installieren
Führen Sie das lokale Ruby-basierte Setup-Skript aus, um Ihre Docker-Images einzurichten:
bin/setup_docker
Wenn Sie einige Fälle mit Hunderten oder Tausenden von Abfragen erstellen möchten, gehen Sie wie folgt vor:
bin/docker r bundle exec thor sample_data:large_data
Dies ist nützlich für Stresstests Quepid! Vor allem die Front-End-Anwendung!
Um die Jupyter-Notebooks auszuführen, müssen Sie schließlich Folgendes ausführen:
bin/setup_jupyterlite
Starten Sie nun Quepid lokal unter http://localhost:
bin/docker server
Es kann bis zu einer Minute dauern, bis der Server antwortet, da er beim ersten Aufruf alle Front-End-Assets kompiliert.
Wir haben ein Hilfsskript zum Ausführen und Verwalten der App über Docker erstellt, das den Befehl docker-compose
umschließt. Sie müssen Ruby installiert haben. Sie können docker compose
weiterhin direkt verwenden, aber für die grundlegenden Dinge können Sie Folgendes verwenden:
bin/docker server
oder bin/docker s
bin/docker bash
oder bin/docker ba
bin/docker console
oder bin/docker c
bin/docker run [COMMAND]
oder bin/docker r [COMMAND]
bin/docker daemon
oder bin/docker q
bin/docker destroy
oder bin/docker d
bin/docker r rails test:frontend
bin/docker r rails test
Wenn Sie die App unter Foreman ausführen, wird nur ein Anforderungsprotokoll angezeigt. Für eine detailliertere Protokollierung führen Sie Folgendes aus:
tail -f log/development.log
Es gibt drei Arten von Tests, die Sie ausführen können:
Diese Tests führen die Tests von der Rails-Seite aus (hauptsächlich API-Controller und Modelle):
bin/docker r rails test
Führen Sie eine einzelne Testdatei aus über:
bin/docker r rails test test/models/user_test.rb
Oder sogar ein einzelner Test in einer Testdatei durch Übergabe der Zeilennummer!
bin/docker r rails test test/models/user_test.rb:33
Wenn Sie die Einrichtung Ihrer Testdatenbank zurücksetzen müssen, führen Sie Folgendes aus:
bin/docker r bin/rake db:drop RAILS_ENV=test
bin/docker r bin/rake db:create RAILS_ENV=test
Sehen Sie sich die Protokolle an, die während des Tests generiert wurden. Setzen Sie config.log_level = :debug
in test.rb
und schließen Sie dann die Protokolldatei über Folgendes ab:
tail -f log/test.log
So überprüfen Sie die JS-Syntax:
bin/docker r rails test:jshint
Führt Tests für die Angular-Seite durch. Es gibt zwei Modi für die Karma-Tests:
bin/docker r rails karma:run
bin/docker r bin/rake karma:start
Hinweis: Für die Karma-Tests müssen die Assets vorkompiliert werden, was den Testlauf erheblich in die Länge zieht. Wenn Sie nur Änderungen an den Test-/Spezifikationsdateien vornehmen, wird empfohlen, die Tests im Überwachungsmodus ( bin/docker r bin/rake karma:start
) auszuführen. Die Einschränkung besteht darin, dass Sie jedes Mal, wenn Sie eine Änderung an den App-Dateien vornehmen, den Prozess neu starten müssen (oder den Einzelausführungsmodus verwenden müssen).
So überprüfen Sie die Ruby-Syntax:
bin/docker r bundle exec rubocop
Rubocop kann oft viele der Flusenprobleme, auf die es stößt, über --autocorrect-all
automatisch korrigieren:
bin/docker r bundle exec rubocop --autocorrect-all
Wenn es einen neuen „Cop“, wie sie ihre Regeln nennen, gibt, der uns nicht gefällt, können Sie ihn zur Datei ./rubocop.yml
hinzufügen.
Wenn Sie alle Tests auf einmal ausführen möchten (z. B. bevor Sie einen Commit und einen Push ausführen), führen Sie einfach diese beiden Befehle aus:
bin/docker r rails test
bin/docker r rails test:frontend
Aus irgendeinem Grund können wir nicht beides mit einem Befehl ausführen, obwohl wir dazu in der Lage sein sollten! .
Wenn Sie eine Menge Abfragen für einen Benutzer zum Testen erstellen möchten, führen Sie dies aus
bin/docker r bin/rake db:seed:large_cases
Sie haben zwei Benutzer, [email protected]
und [email protected]
mit denen Sie testen können.
Wenn Sie die Jupyterlite-Notebooks testen oder mit einer „echten“ Hülle und einem Buch arbeiten möchten, dann führen Sie es aus
bin/docker r bundle exec thor sample_data:haystack_party
Ihnen stehen zahlreiche Benutzerdaten aus dem Haystack-Bewertungspartybuch und -koffer zur Verfügung, mit denen Sie arbeiten können. Diese Daten stammen aus dem öffentlichen Fall https://app.quepid.com/case/6789/try/12?sort=default und https://app.quepid.com/books/25
Das Debuggen von Ruby hängt normalerweise von der Situation ab. Der einfachste Weg besteht darin, das Objekt in STDOUT auszugeben:
puts object # Prints out the .to_s method of the object
puts object . inspect # Inspects the object and prints it out (includes the attributes)
pp object # Pretty Prints the inspected object (like .inspect but better)
In der Rails-Anwendung können Sie den Logger für die Ausgabe verwenden:
Rails . logger object . inspect
Wenn das nicht ausreicht und Sie einen Debugger ausführen möchten, ist das debug
Gem dafür enthalten. Siehe https://guides.rubyonrails.org/debugging_rails_applications.html#debugging-with-the-debug-gem.
Außerdem haben wir den derailed
Edelstein zur Verfügung, der Ihnen hilft, Speicherprobleme zu verstehen.
bin/docker r bundle exec derailed bundle:mem
Während Sie die Anwendung ausführen, können Sie das Javascript mit Ihrem bevorzugten Tool debuggen, so wie Sie es immer getan haben.
Die Javascript-Dateien werden mithilfe der Rails-Asset-Pipeline zu einer Datei verkettet.
Sie können dies deaktivieren, indem Sie das folgende Flag in config/environments/development.rb
umschalten:
# config.assets.debug = true
config . assets . debug = false
Zu
config . assets . debug = true
# config.assets.debug = false
Da es zu viele Angular JS-Dateien in dieser Anwendung gibt und Rails im debug
Modus versucht, jede Datei einzeln zu laden, verlangsamt dies die Anwendung und wird im Entwicklungsmodus wirklich lästig, wenn man auf das Laden der Skripte warten muss. Aus diesem Grund ist es standardmäßig deaktiviert.
PS: Vergessen Sie nicht, den Server neu zu starten, wenn Sie die Konfiguration ändern.
Bitte beachten Sie außerdem, dass die Dateien secure.js
, application.js
und admin.js
zum Laden aller JavaScript- und CSS-Abhängigkeiten über die Rails Asset-Pipeline verwendet werden. Wenn Sie Bootstrap debuggen, benötigen Sie einzelne Dateien. Ersetzen Sie also //= require sprockets
durch //= require bootstrap-sprockets
.
docker-compose.override.yml.example
kann nach docker-compose.override.yml
kopiert und zum Überschreiben von Umgebungsvariablen oder zum Arbeiten mit einer lokalen Kopie der splainer-search JS-Bibliothek während der Entwicklung verwendet werden, die in docker-compose.yml
definiert ist. Beispiel liegt bei. Aktualisieren Sie einfach den Pfad zur splainer-search
mit Ihrem lokalen Checkout! https://docs.docker.com/compose/extends/
Diese Anwendung bietet zwei Möglichkeiten zum Ausführen von Skripten: rake
und thor
.
Rake eignet sich hervorragend für einfache Aufgaben, die von der Anwendungsumgebung abhängen, sowie für Standardaufgaben, die standardmäßig in Rails enthalten sind.
Während Thor ein leistungsfähigeres Werkzeug zum Schreiben von Skripten ist, das Argumente viel besser berücksichtigt als Rake.
Um zu sehen, welche Rake-Aufgaben verfügbar sind, führen Sie Folgendes aus:
bin/docker r bin/rake -T
Hinweis : Durch die Verwendung von bin/rake
wird sichergestellt, dass die ausgeführte rake
-Version an Gemfile.lock
der App gebunden ist (um Konflikte mit anderen Versionen zu vermeiden, die möglicherweise auf Ihrem System installiert sind). Dies entspricht bundle exec rake
.
Häufige Rake-Aufgaben, die Sie verwenden könnten:
# db
bin/docker r bin/rake db:create
bin/docker r bin/rake db:drop
bin/docker r bin/rake db:migrate
bin/docker r bin/rake db:rollback
bin/docker r bin/rake db:schema:load
bin/docker r bin/rake db:seed
bin/docker r bin/rake db:setup
# show routes
bin/docker r bin/rails routes
# tests
bin/docker r rails test
bin/docker r rails test:frontend
bin/docker r bin/rake test:jshint
Die verfügbaren Aufgaben werden angezeigt:
bin/docker r bundle exec thor list
Weitere Dokumentation finden Sie in der Betriebsdokumentation.
Sie müssen Elasticsearch so konfigurieren, dass Anfragen vom Browser mithilfe von CORS akzeptiert werden. Um CORS zu aktivieren, fügen Sie Folgendes zur Konfigurationsdatei von Elasticsearch hinzu. Normalerweise befindet sich diese Datei in der Nähe der ausführbaren Elasticsearch-Datei unter config/elasticsearch.yml
.
http.cors :
enabled : true
allow-origin : /https?://localhost(:[0-9]+)?/
Weitere Details finden Sie im Wiki unter https://github.com/o19s/quepid/wiki/Troubleshooting-Elasticsearch-and-Quepid
Normalerweise würden Sie einfach Folgendes tun:
bin/docker r yarn add foobar
oder
bin/docker r yarn upgrade foobar
Dadurch wird das Node-Modul installiert/aktualisiert und diese Abhängigkeit wird dann in package.json
gespeichert.
Checken Sie dann die aktualisierten Dateien package.json
und yarn.lock
ein.
Verwenden Sie bin/docker r yarn outdated
um zu sehen, welche Pakete Sie aktualisieren können!!!!
Normalerweise würden Sie einfach Folgendes tun:
bin/docker r bundle add foobar
Dadurch wird das neue Gem installiert und diese Abhängigkeit dann in Gemfile
gespeichert.
Sie können ein Gem, für das es keine bestimmte Version in Gemfile
gibt, auch über Folgendes aktualisieren:
bin/docker r bundle update foobar
Sie können einen Edelstein wie folgt entfernen:
bin/docker r bundle remove foobar
Checken Sie dann die aktualisierten Dateien Gemfile
und Gemfile.lock
ein. Führen Sie zur Sicherheit bin/setup_docker
aus.
Um herauszufinden, ob Ihre Edelsteine veraltet sind, führen Sie Folgendes aus:
bin/docker r bundle outdated --groups
Kommentieren Sie in docker-compose.yml
die Einstellung - RAILS_RELATIVE_URL_ROOT=/quepid-app
aus und öffnen Sie dann http://localhost:3000/quepid-app.
Mit diesen Schritten sollten Sie einen Produktions-Build (im Gegensatz zum Entwickler-Build) von Quepid lokal ausführen können.
docker build -t o19s/quepid -f Dockerfile.prod .
Dies könnte beim ersten Durchlauf zu einem Fehler führen. Versuchen Sie es erneut, wenn das passiert
docker tag o19s/quepid o19s/quepid:$QUEPID_VERSION
docker compose up -d mysql
docker compose run --rm app bin/rake db:setup
Aktualisieren Sie Ihre docker-compose.prod.yml-Datei, um Ihr Image zu verwenden, indem Sie die Image-Version im App- image: o19s/quepid:10.0.0
Starten Sie die App entweder als Daemon (-d) oder als aktiven Container
docker compose up [-d]
Es gibt ein Verzeichnis .ssl
, das die für SSL verwendeten Schlüssel- und Zertifikatsdateien enthält. Dies ist ein selbstsigniertes Zertifikat, das NUR zur Verwendung in der Entwicklung bestimmt ist!
Der Schlüssel/das Zertifikat wurde mit dem folgenden Befehl generiert:
openssl req -new -newkey rsa:2048 -sha1 -days 365 -nodes -x509 -keyout .ssl/localhost.key -out .ssl/localhost.crt
PS: Das muss man nicht nochmal machen.
Die Datei docker-compose.yml
enthält einen Nginx-Reverse-Proxy, der diese Zertifikate verwendet. Sie können auf Quepid unter https://localhost oder http://localhost zugreifen. (Quepid wird weiterhin über http auf Port 80 verfügbar sein.)
Fügen Sie hier Entwicklungsdokumente hinzu!
Die Anmeldeinformationen für die Entwicklerbereitstellung von Keycloak für die Admin-Konsole lauten admin
und password
.
Hier ist ein Beispiel für die Generierung einer Migration:
bin/docker r bundle exec bin/rails g migration FixCuratorVariablesTriesForeignKeyName
Gefolgt von bin/docker r bundle exec rake db:migrate
Sie sollten auch die Schemaanmerkungsdaten aktualisieren, indem Sie bin/docker r bundle exec annotations
ausführen, wenn Sie das Schema ändern.
Ändern Sie die Datei Gemfile
und führen Sie dann Folgendes aus:
bin/docker r bundle install
Sie werden ein aktualisiertes Gemfile.lock
sehen, überprüfen Sie es und fügen Sie Gemfile
in Git ein.
Wir verwenden Angular 1 für die interaktive Kernanwendung und als Teil davon verwenden wir das angular-ui-bootstrap
Paket für alle unsere UI-Komponenten. Dieses Paket ist an Bootstrap Version 3 gebunden.
Wir importieren das Bootstrap 3 CSS direkt über die Datei bootstrap3.css
.
Für den Rest von Quepid verwenden wir Bootstrap 5! Dies wird über package.json
mithilfe von NPM eingebunden. Siehe admin.js
für die Zeile //= require bootstrap/dist/js/bootstrap.bundle
.
Wir verwenden derzeit Rails Sprockets, um alles zu kompilieren, träumen aber davon, auf Propshaft umzusteigen und vielleicht auf js-Bündelung.
Die Aller -Schriftart stammt von FontSquirrel und die .ttf-Datei wird in das .woff2-Format konvertiert.
Führen Sie ./bin/setup_jupyterlite
aus, um die Archivdatei ./jupyterlite/notebooks.gz
zu aktualisieren. Dadurch werden auch die statischen Dateien im Verzeichnis ./public/notebooks
eingerichtet. Damit wir jedoch nicht Hunderte von Dateien einchecken, ignorieren wir dieses Verzeichnis von Github. Zum Zeitpunkt asset:precompile
entpacken wir stattdessen die Datei ./jupyterlite/notebooks.gz
. Dies funktioniert auf Heroku und dem Produktions-Docker-Image.
Um die Version von Jupyterlite zu aktualisieren, bearbeiten Sie Dockerfile.dev
und Dockerfile.prod
und aktualisieren Sie die pip install
.
Frage? Funktioniert Jupyterlite in Localhost????
Sehen Sie sich diesen großartigen Blogbeitrag an: https://keygen.sh/blog/how-to-implement-api-key-authentication-in-rails-without-devise/.
Es gibt eine Code-Bereitstellungspipeline zur Website http://quepid-staging.herokuapp.com, die bei erfolgreichen Commits an main
ausgeführt wird.
Wenn Sie ausstehende Migrationen haben, müssen Sie diese über Folgendes ausführen:
heroku run bin/rake db:migrate -a quepid-staging
heroku restart -a quepid-staging
Die folgenden Konten werden durch den Prozess bin/setup_docker
erstellt. Sie folgen alle dem folgenden Format:
email: quepid+[type]@o19s.com
password: password
Dabei ist Typ einer der folgenden:
admin
: Ein AdministratorkontorealisticActivity
: Ein Benutzer mit verschiedenen Fällen, die Quepid demonstrieren, einschließlich der Haystack Rating Party-Demohülle und des Buches, und ist Mitglied des „OSC“-Teams.100sOfQueries
: Ein Benutzer mit einem Solr-Fall, der Hunderte von Abfragen enthält (normalerweise deaktiviert)1000sOfQueries
: Ein Benutzer mit einem Solr-Fall, der Tausende von Abfragen enthält (normalerweise deaktiviert)oscOwner
: Ein Benutzer, dem das Team „OSC“ gehört.oscMember
: Ein Benutzer, der Mitglied des Teams „OSC“ ist.Weitere Informationen zur Datenstruktur der App finden Sie in der Datenzuordnungsdatei.
Erstellen Sie die ERD über bin/docker r bundle exec rake erd:image
Weitere Informationen zur Struktur von Quepid finden Sie in der App-Strukturdatei.
Weitere Informationen dazu, wie Quepid für Ihr Unternehmen betrieben und konfiguriert werden kann, finden Sie in der Betriebsdokumentationsdatei.
Ohne die Beiträge vieler Einzelpersonen und Organisationen wäre Quepid nicht möglich.
Insbesondere möchten wir Erik Bugge und den Leuten von Kobler für die Finanzierung der in Quepid 6.4.0 veröffentlichten Funktion „Only Rated“ danken.
Quepid war nicht immer Open Source! Sehen Sie sich die Credits an, um eine Liste der Mitwirkenden des Projekts zu erhalten.
Wenn Sie die Entwicklung einer neuen Funktion für Quepid finanzieren möchten, nehmen Sie Kontakt mit uns auf!