-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathREADME
294 lines (199 loc) · 9.1 KB
/
README
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
Beschreibung
===================
Infopark SES ist ein Ruby-Gem, das zum Zweck der Indizierung von Infopark CMS Fiona-Inhalten
vom CM Nachrichten über geänderte CMS-Objekte entgegen nimmt, Indizierungs-
oder Deindizierungs-Anfragen erzeugt und diese an Solr sendet.
Das Infopark SES Ruby-Gem ergänzt eine bestehende Rails-App, typischerweise die
Website-App eines konkreten Projekts. Die Rails-App muss bereits den Infopark
Rails Connector einsetzen. Infopark SES setzt eine Rails Connector-Anbindung
zur CMS-Datenbank voraus.
Infopark SES besteht aus dem SES Indexer-Resque-Worker, einem Installer für
Apache Solr und der Logik zum Verbinden dieser Software-Komponenten. Der
eigentliche Kern des Infopark SES ist der Indexer. Er fragt unter Benutzung des
Rails Connectors Objekt-Felder ab, und schickt diese aufbereitet an Apache
Solr.
Der Installer für Redis (ist Voraussetzung für Resque) ist nicht enthalten.
Die Installation ist auf http://redis.io/download beschrieben. Empfehlung: von
einem Sysadmin mit einem Paketmanager installieren lassen (z.B. emerge),
Eintragen in den Default-Runlevel (z.B. rc-update add redis default) und
starten mit /etc/init.d/redis start.
Lizenz
========
Das Gem steht unter LGPL v3. Details siehe LICENSE.md.
Gem testen
==============
Es wird eine Fiona-7-Installation per Vagrant in ~/nps vorausgesetzt.
Die Tests des Infopark SES Gems werden mit
vagrant ssh
cd ~/ses
mysqladmin -uroot create test_ses_lucene
bundle
bundle exec rake test
ausgeführt. Die Tests sind vollständige Integrationstests. Sie liegen in
test_app. Die von der test_app verwendeten Gems liegen in vendor/cache.
Verwendet wird Ruby 1.9.
Gem bauen
==============
rake build
Vorraussetzungen
=================
Solr 6 Setz Java 8 vorraus und wird nicht unter Java 7 laufen.
Ein Betrieb mit einer ältern Solr Version ist allerdings auch möglich (zb. 5.5.2 )
Installation
==============
Einbindung des Infopark SES Gem in die Rails-App
------------------------------------------------
Gemfile:
`gem "infopark_ses"`
Infopark SES neben den Infopark Rails Connector und die anderen Gems in vendor/cache ablegen:
`cp infopark_ses-x.y.z.gem vendor/cache/`
Gems installieren:
`bundle`
Bundler lädt notwendige Gems bei Bedarf von rubygems.org herunter. Alle
Gem-Dateien werden, bevor sie installiert werden, automatisch in vendor/cache
abgelegt, wenn mindestens ein Gem dort liegt. Bundler hält diesen Cache
selbständig up-to-date. Alle Gems in vendor/cache können eingecheckt werden.
Das wird sogar empfohlen, weil so das Deployment (mit Capistrano und Bundler)
auch ohne Internet-Verbindung ausgeführt werden kann.
Infopark SES bringt beispielhaft Konfigurationsdateien mit, die in der
Projekt-Rails-App benötigt werden:
`rails g ses:install`
Ein paar dieser generierten Dateien werden im Folgende beschrieben:
In `config/initializers/indexer.rb` wird festgelegt, welche Attribute eines Obj
unter welchem Key im Solr-Index gespeichert werden sollen.
`Infopark::SES::Indexer.index_fields` liefert für ein Obj einen Hash mit der
Abbildung von Index-Keys auf Obj-Attribut-Werte. Liefert die Konfiguration nil,
wird die Datei nicht indiziert bzw. deindiziert.
`Infopark::SES::Indexer.index_fields` soll projektspezifisch konfiguriert werden.
`config/initializers/filter.rb` enthält Konfigurationseinstellungen, um den
Fiona-IF-Filter (.doc, .pdf -> .html) oder den Solr Content Extraction Library
(Solr Cell) (.pdf, .html -> .txt) einzubinden.
Um den Indexing-Worker sauber zu überwachen wird für diesen eine pid-Dateie erzeugt,
welche die Prozess-Id des Workers enthält. Diese wird unter dem folgenden Pfad erzeugt.
Bitte stellen Sie sicher, dass der Pfad entsprechend existiert:
`YOUR_RAILS_APPLICATION/tmp/pids`
Des Worker selbst können Sie anschließend über Rake-Tasks starten und oder stoppen:
rake index:all # Re-index all objects
rake index:worker:restart # Restart the worker
rake index:worker:start # Start the worker
rake index:worker:status # Reports the status of the worker
rake index:worker:stop # Stop the worker
Der Worker erzeugt ein eigenes Log im Applikations-Log-Ordner:
`YOUR_RAILS_APPLICATION/log/resque_worker_index_COLLECTION.log`
Deployment in die Preview-Umgebung konfigurieren
--------------------------------------------------
Die Capistrano-Konfiguration für das Deployment mit Bundler kann folgendermaßen
ergänzt werden. Am Anfang der Datei `config/deploy.rb` einfügen:
```
set :bundle_flags, "--deployment --quiet --local"
require 'bundler/capistrano'
```
In den Namespace :deploy zusätzlich den Task :restart_ses_indexer einfügen:
```
task :restart_ses_indexer, :roles => :app do
if stage == 'cms_preview'
run "cd #{current_path} && bundle exec rake index:worker:restart"
end
end
```
Und weiter unten:
`after "deploy:restart", "deploy:restart_ses_indexer"`
Beim Deployment installiert Bundler mit der o.g. Option --deployment die Gems
automatisch ins Capistrano-Projekt-Verzeichnis shared/bundle, also direkt neben
releases, current usw. Damit werden Gems im User-Space projektbezogen verwaltet.
Deploy ins Preview-Environment:
cap deploy
Anbindung von Resque auf dem CMS-Server
------------------------------------------------------------------------
Bei Änderungen an Objekten werden vom CM entsprechende Indizierungs-Jobs in die
Job-Queue von Resque gestellt werden. In Fiona existiert bereits die
Schnittstelle, um die Tcl-Prozedur objectChangedCallback aufzurufen. Diese
Prozedur muss nur noch im CM implementiert werden.
Die Beispiel-Implementierung wird folgermaßen ins CM-Script-Verzeichnis kopiert
und anschließend konfiguriert:
```
cp $(bundle show infopark_ses)/cms-callback/* ~/CMS-Fiona/instance/default/script/cm/serverCmds/
gem install resque --no-ri --no-rdoc --no-user-install --install-dir ~/CMS-Fiona/instance/default/script/gems
gem install json --no-ri --no-rdoc --no-user-install --install-dir ~/CMS-Fiona/instance/default/script/gems
```
Das Gem stellt zwei Implementationen bereit, von denen immer nur eine aktiv sein sollte.
1. `rails_objectChangedCallback.tcl`
Diese implementation basiert auf einem Rails-Callback. Grundlegend ruft es ein Ruby-Skript auf, um die geänderten
Objekte in die Resque-Warteschlange zu schieben.
Vorteil: Funktioniert ohne weitere Abhängigkeiten
Nachteil: Das aufrufen, des Ruby-Script ist eventuell langsam ( ~1sec ) da einige Gems geladen werden müssen
Für Entwicklungsumgebung ausreichend.
2. `nativ_objectChangedCallback.tcl`
Diese implementation verwendet das redis-cli Konsolen Kommando um direkt mit dem Redis zu sprechen, und die
geänderten Objekte in die Wartschlage zu schreiben.
Vorteil: Arbeitet schneller als die Ruby-Implementation
Nachteil: Erfordert die Installation von `redis-cli` auf dem Server
Für Produktive Umgebung empfehlenswert.
Löschen Sie jeweils die Implementation aus ~/CMS-Fiona/instance/default/script/cm/serverCmds/ die nicht verwendet
werden soll.
Schließlich muss noch der CM neu gestartet werden, damit er den neuen Callback nutzt:
```
~/CMS-Fiona/instance/default/bin/rc.npsd restart CM
```
Installation von Solr
------------------------------------
(Homepage: <http://lucene.apache.org/solr/>)
Der Java-Server Apache Solr wird ebenfalls mit curl heruntergeladen und in $HOME
installiert. Per Konvention zeigt ein Symlink namens apache-solr auf das
ausgepackte Verzeichnis, damit es einfach über ~/apache-solr referenziert
werden kann. Anschließend wird die neue Installation so konfiguriert, dass sie
für den Einsatz mit Fiona geeignet ist:
```
ssh cms-host
cd $project/preview/current
bundle exec ses-apache-solr install
```
Starten:
```
bundle exec ses-apache-solr start
```
Stoppen:
```
bundle exec ses-apache-solr stop
```
Status:
```
bundle exec ses-apache-solr status
```
Zur Problemanalyse ist der Apache Solr erreichbar unter:
`http://localhost:8983/solr`
Solr Erzegut Logs unter dem folgenden Verzeichnis:
```
~/apache-solr/cms/logs/solr-8983-console.log
```
Der Indexer selbst schreibt ein dediziertes Log unter :
```
RAILS_APP_HOME/log/resque_worker_index_seslucenmy.log
```
Resque ist über die eigene Applikation unter der folgenden Adresse erreichbar:
```
http://localhost:3000/resque
```
Wenn dieser unter `config/routes.rb` entsprechend eingerichtet ist:
```
mount Resque::Server.new, :at => "/resque"
```
Komplette Indizierung
---------------------------
```
ssh cms-host
cd $project/preview/current
RAILS_ENV=production bundle exec rake index:worker:start
RAILS_ENV=production bundle exec rake index:all
```
Integration der Suche in Rails
--------------------------------
Die Rails-Connector-Add-Ons( ab Version 6.7.3 bis Version 7.0.2 ) unterstützen den Lucene-basierten SES.
Zur Aktivierung muss der SearchRequest umdefiniert werden (lib/search_request.rb):
```
class SearchRequest < RailsConnector::LuceneSearchRequest
end
```
Das Interface bleibt gleich, bis auf folgende Ausnahmen: Querys werden in Solr
Query Language anstatt VQL geschrieben. Die möglichen Optionen sind im
LuceneSearchRequest dokumentiert.