From 19c29ef021a310cc7f0f8c88112728bb78fbd85f Mon Sep 17 00:00:00 2001 From: Joerg Reichert Date: Sun, 16 Apr 2023 12:52:38 +0200 Subject: [PATCH] run docker container without root users, fix broken links --- .env.sample | 2 + .gitignore | 1 + Dockerfile | 61 +++++++++++++---- README.md | 20 +++--- app/assets/config/manifest.js | 2 + app/assets/javascripts/geo.js | 80 +++++++++++------------ app/views/application/glossary.html.slim | 36 +++++----- app/views/application/impressum.html.slim | 4 +- config/environments/development.rb | 2 +- config/environments/production.rb | 2 +- docker-compose.yml | 19 ++++-- docker/elasticsearch/elasticsearch.yml | 12 ++++ 12 files changed, 151 insertions(+), 90 deletions(-) create mode 100644 .env.sample create mode 100644 docker/elasticsearch/elasticsearch.yml diff --git a/.env.sample b/.env.sample new file mode 100644 index 0000000..c741e89 --- /dev/null +++ b/.env.sample @@ -0,0 +1,2 @@ +APPLICATION_HOST=localhost +ESDATA=../esdata \ No newline at end of file diff --git a/.gitignore b/.gitignore index 3b9555d..dd68ef8 100644 --- a/.gitignore +++ b/.gitignore @@ -20,3 +20,4 @@ config/morph.yml /node_modules /app/assets/builds/* !/app/assets/builds/.keep +.env diff --git a/Dockerfile b/Dockerfile index 6ecf0c7..db39d8f 100755 --- a/Dockerfile +++ b/Dockerfile @@ -1,37 +1,72 @@ FROM ruby:3.2.2 RUN apt-get update && apt-get install -y curl -RUN curl -fsSL https://deb.nodesource.com/setup_lts.x | bash - +RUN curl -fsSL https://deb.nodesource.com/setup_lts.x | bash - RUN apt-get update && apt-get install -y ruby ruby-dev ruby-bundler \ build-essential zlib1g-dev libsqlite3-dev libxml2-dev libxslt1-dev pkg-config nodejs RUN apt-get clean && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* -RUN gem install bundler - ENV DOCKERIZE_VERSION v0.6.1 RUN curl -sSLO https://github.com/jwilder/dockerize/releases/download/$DOCKERIZE_VERSION/dockerize-linux-amd64-$DOCKERIZE_VERSION.tar.gz \ && tar -C /usr/local/bin -xzvf dockerize-linux-amd64-$DOCKERIZE_VERSION.tar.gz \ && rm dockerize-linux-amd64-$DOCKERIZE_VERSION.tar.gz -RUN mkdir -p /app +COPY ./docker-entrypoint.sh / +RUN chmod +x docker-entrypoint.sh -WORKDIR /tmp +RUN mkdir -p /home/srm/tmp +#COPY Gemfile.lock /home/srm/tmp/Gemfile.lock + +RUN groupadd -r srm && useradd -r -g srm srm +RUN chown -R srm:srm /home/srm +USER srm + +WORKDIR /home/srm + +RUN git clone https://github.com/sstephenson/rbenv.git .rbenv +RUN git clone https://github.com/sstephenson/ruby-build.git ~/.rbenv/plugins/ruby-build + +RUN echo 'export PATH="/home/srm/.rbenv/bin:$PATH"' >> .bashrc && echo 'eval "$(~/.rbenv/bin/rbenv init -)"' >> .bashrc && . ~/.bashrc +RUN /home/srm/.rbenv/bin/rbenv install 3.2.2 +RUN /home/srm/.rbenv/bin/rbenv rehash +RUN /home/srm/.rbenv/bin/rbenv global 3.2.2 + + +RUN curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.3/install.sh | bash + +ENV NODE_VERSION 18.16.0 +ENV NVM_DIR /home/srm/.nvm +RUN \ + . ~/.nvm/nvm.sh \ + && nvm install $NODE_VERSION \ + && nvm alias default $NODE_VERSION \ + && nvm use default; + +ENV NODE_PATH $NVM_DIR/v$NODE_VERSION/lib/node_modules +ENV PATH $NVM_DIR/versions/node/v$NODE_VERSION/bin:$PATH + +RUN gem install bundler + +RUN mkdir -p /home/srm/app +ADD . /home/srm/app +USER root +RUN chown -R srm:srm /home/srm/app + +USER srm +WORKDIR /home/srm/app -COPY Gemfile Gemfile -COPY Gemfile.lock Gemfile.lock RUN bundle config build.nokogiri --use-system-libraries RUN bundle update RUN bundle install -ADD . /app -WORKDIR /app +COPY package.json package.json +USER root +RUN chown -R srm:srm package.json +USER srm RUN npm install -g yarn sass -COPY ./docker-entrypoint.sh / -RUN chmod +x docker-entrypoint.sh - EXPOSE 3000 ENTRYPOINT ["/docker-entrypoint.sh"] -CMD ["rails", "server", "-b", "0.0.0.0"] +CMD ["bundle", "exec", "puma" "-C", "config/puma.rb"] diff --git a/README.md b/README.md index 7ffd3d8..e62cd53 100644 --- a/README.md +++ b/README.md @@ -4,7 +4,7 @@ ## Usage / Features -The Stadtratmonitor Leipzig is a lightweight user interface for performing full text searches against paper contents issued to the city council of Leipzig. Note, this solution uses the data from [Ratsinformationssystem Leipzig](https://ratsinfo.leipzig.de/bi/allris.net.asp) that also offers [text search capabilities](https://ratsinfo.leipzig.de/bi/yw010.asp). +The Stadtratmonitor Leipzig is a lightweight user interface for performing full text searches against paper contents issued to the city council of Leipzig. Note, this solution uses the data from [Ratsinformationssystem Leipzig](https://ratsinformation.leipzig.de/allris_leipzig_public/) that also offers [text search capabilities](https://ratsinformation.leipzig.de/allris_leipzig_public/vo040). ### Sorting * Sort by date, paper was issued @@ -34,7 +34,7 @@ The Stadtratmonitor Leipzig is a lightweight user interface for performing full * [Firefox Extension](https://addons.mozilla.org/en-US/firefox/addon/simple-rss-reader-srr) * [RSSOWL](http://www.rssowl.org/) -#### Example using Firefox and RSSOWL +#### Example using Firefox and RSSOWL Click on the newsfeed icon in the address bar ![Abonnieren mit Firefox](https://cloud.githubusercontent.com/assets/994131/14060508/fe7f4514-f366-11e5-85ae-2fa2e50b91ea.JPG) @@ -63,7 +63,7 @@ docker. 1. Install docker and docker-compose: https://docs.docker.com/compose/install/ 1. Start the app: `docker-compose up` -1. Initialize the database: `docker-compose run web rake db:setup` +1. Initialize the database: `docker-compose run --user srm web rake db:setup'` 1. See "Importing data" below 1. Get the address of the docker host: `docker-machine ip default` 1. Point your browser to: 'http://\:3000' @@ -76,19 +76,19 @@ rake tmp:clear npm install -g sass #rails css:install:bootstrap #rails javascript:install:esbuild -rake assets:precompile +rake assets:precompile ``` ### Importing data and building the index -1. Currently an API key for morph is required: - `cp config/morph.yml.example config/morph.yml` - Edit the morph.yml file and insert the Morph API key -1. Import the data from our scraper: `docker-compose run web rake import_papers` -1. Build the elasticsearch index: `docker-compose run web rake index:rebuild` +1. You can use [our allris-scraper](https://github.com/CodeforLeipzig/allris-scraper) to download the papers (resp. their links) from the [OPARL](https://oparl.org/) API, this will produce an input.json file +1. Put this input.json to a public web server and set the URL to this file then in: + `app/controllers/import_controller.rb` and `lib/tasks/import_papers.rake` +1. Import the data from our scraper: `docker-compose run --user srm web rake import_papers'` +1. Build the elasticsearch index: `docker-compose run --user srm web rake index:rebuild'` ### Running tests Assuming docker and docker-compose is installed: -1. `docker-compose run web bin/run-tests` +1. `docker-compose run --user srm web bin/run-tests` diff --git a/app/assets/config/manifest.js b/app/assets/config/manifest.js index 8c83993..c6eba05 100644 --- a/app/assets/config/manifest.js +++ b/app/assets/config/manifest.js @@ -1,2 +1,4 @@ +//= link geo.js +//= link application.js //= link_tree ../../../vendor/javascript .js //= link_tree ../builds diff --git a/app/assets/javascripts/geo.js b/app/assets/javascripts/geo.js index d074c1d..aca48f8 100644 --- a/app/assets/javascripts/geo.js +++ b/app/assets/javascripts/geo.js @@ -6,16 +6,16 @@ function geojsonDaten() { "type": "Feature", "properties": { "name": "Stadtbezirksbeirat Mitte", - "raum": "Neues Rathaus, Zi. 495", - "ort": "Martin-Luther-Ring 4-6, 04109 Leipzig", + "raum": "Stadtbüro", + "ort": "Burgplatz 1, 04109 Leipzig", "typ": "Stadtbezirksbeirat", "id": "2350" }, "geometry": { "type": "Point", "coordinates": [ - 12.3726786, - 51.3360228 + 12.3727021, + 51.3370619 ] } }, @@ -23,16 +23,16 @@ function geojsonDaten() { "type": "Feature", "properties": { "name": "Stadtbezirksbeirat Nordost", - "raum": "Rathaus Schönefeld, Raum 100", - "ort": "Ossietzkystraße 37, 04347 Leipzig", + "raum": "KulturGut Schloss Schönefeld", + "ort": "Zeumerstraße 1, 04347 Leipzig", "typ": "Stadtbezirksbeirat", "id": "2284" }, "geometry": { "type": "Point", "coordinates": [ - 12.4106166658912, - 51.35950645 + 12.407042064270335, + 51.35905225 ] } }, @@ -40,16 +40,16 @@ function geojsonDaten() { "type": "Feature", "properties": { "name": "Stadtbezirksbeirat Ost", - "raum": "IC-E Informationszentrum", - "ort": "Eisenbahnstraße 49, 04315 Leipzig", + "raum": "BSZ 7 - Außenstelle", + "ort": "Neustädter Straße 1, 04315 Leipzig", "typ": "Stadtbezirksbeirat", "id": "2295" }, "geometry": { "type": "Point", "coordinates": [ - 12.4022556, - 51.3458445 + 12.399940740484912, + 51.344629850000004 ] } }, @@ -74,7 +74,7 @@ function geojsonDaten() { "type": "Feature", "properties": { "name": "Stadtbezirksbeirat Süd", - "raum": "Immanuel-Kant-Gymnasium, Zi. 024", + "raum": "Immanuel-Kant-Gymnasium, Zi. 408", "ort": "Scharnhorststraße 15, 04275 Leipzig", "typ": "Stadtbezirksbeirat", "id": "2369" @@ -91,16 +91,16 @@ function geojsonDaten() { "type": "Feature", "properties": { "name": "Stadtbezirksbeirat Südwest", - "raum": "Schule am Adler - Oberschule, Erdgeschoss - Raum 10", - "ort": "Antonienstraße 24, 04229 Leipzig", + "raum": "Schule am Grünen Gleis", + "ort": "Baumannstraße 13, 04229 Leipzig", "typ": "Stadtbezirksbeirat", "id": "2309" }, "geometry": { "type": "Point", "coordinates": [ - 12.3293545312521, - 51.3209155 + 12.323566707065215, + 51.3176798 ] } }, @@ -159,16 +159,16 @@ function geojsonDaten() { "type": "Feature", "properties": { "name": "Stadtbezirksbeirat Nord", - "raum": "Gohlis-Center, Zi. 340", - "ort": "Elsbethstraße 19-25, 04155 Leipzig", + "raum": "Kulturhof Gohlis, Kultursaal", + "ort": "Eisenacher Straße 72, 04155 Leipzig", "typ": "Stadtbezirksbeirat", "id": "2272" }, "geometry": { "type": "Point", "coordinates": [ - 12.3643525, - 51.3634285 + 12.3592316, + 51.3623363 ] } }, @@ -227,16 +227,16 @@ function geojsonDaten() { "type": "Feature", "properties": { "name": "Ortschaftsrat Hartmannsdorf-Knautnaundorf", - "raum": "Gaststätte \"Zur Ratte\"", - "ort": "Erikenstraße 10, 04249 Leipzig", + "raum": "ehem. Gemeindeamt Knautnaundorf", + "ort": "Schkorlopper Straße 34, 04249 Leipzig", "typ": "Ortschaftsrat", "id": "2283" }, "geometry": { "type": "Point", "coordinates": [ - 12.3086769, - 51.2653949 + 12.26865655, + 51.25494705 ] } }, @@ -295,16 +295,16 @@ function geojsonDaten() { "type": "Feature", "properties": { "name": "Ortschaftsrat Lützschena-Stahmeln", - "raum": "ehem. Feuerwehrgerätehaus Stahmeln", - "ort": "Mühlenstraße 21, 04159 Leipzig", + "raum": "Leipziger Hotel", + "ort": "Hallesche Straße 190, 04159 Leipzig", "typ": "Ortschaftsrat", "id": "2368" }, "geometry": { "type": "Point", "coordinates": [ - 12.3011131, - 51.3766107 + 12.2710945, + 51.3853193 ] } }, @@ -312,16 +312,16 @@ function geojsonDaten() { "type": "Feature", "properties": { "name": "Ortschaftsrat Miltitz", - "raum": "Grundschule Miltitz, Speiseraum", - "ort": "Großmiltitzer Straße 4, 04205 Leipzig", + "raum": "Heimatverein Miltitz", + "ort": "An der alten Post 1, 04205 Leipzig", "typ": "Ortschaftsrat", "id": "2365" }, "geometry": { "type": "Point", "coordinates": [ - 12.2615069, - 51.319427 + 12.25400846230211, + 51.32507435 ] } }, @@ -346,7 +346,7 @@ function geojsonDaten() { "type": "Feature", "properties": { "name": "Ortschaftsrat Plaußig ", - "raum": "Naturschutzstation Plaußig, Schulungsraum", + "raum": "Freiwillige Feuerwehr Plaußig - Schulungsraum", "ort": "Plaußiger Dorfstraße 23, 04349 Leipzig", "typ": "Ortschaftsrat", "id": "2377" @@ -380,16 +380,16 @@ function geojsonDaten() { "type": "Feature", "properties": { "name": "Ortschaftsrat Seehausen", - "raum": "Gasthof Hohenheida", - "ort": "Am Anger 42, 04356 Leipzig", + "raum": "Hort der Grundschule Seehausen", + "ort": "Seehausener Allee 15, 04356 Leipzig", "typ": "Ortschaftsrat", "id": "2312" }, "geometry": { "type": "Point", "coordinates": [ - 12.4455644647629, - 51.4203442 + 12.411255135155008, + 51.40299085 ] } }, @@ -469,8 +469,8 @@ function createPopUpContent(properties) { content += "Raum: " content += properties.raum content += "" return content } \ No newline at end of file diff --git a/app/views/application/glossary.html.slim b/app/views/application/glossary.html.slim index 624b253..4c93fbe 100644 --- a/app/views/application/glossary.html.slim +++ b/app/views/application/glossary.html.slim @@ -33,54 +33,54 @@ html ul li Beschlussvorlage: Problemstellung mit Entwurf eines Lösungsvorschlags, über den in einem Gremium, z.B. der Ratsversammlung, abgestimmt werden soll ul - li Beispiel: https://ratsinfo.leipzig.de/bi/vo020.asp?VOLFDNR=1009094 + li Beispiel: https://ratsinformation.leipzig.de/allris_leipzig_public/vo020?VOLFDNR=1009094&refresh=false li Antrag: konkreter Auftrag an die Verwaltung, über dessen Annahme in der Ratsversammlung abgestimmt werden soll ul - li Beispiel: https://ratsinfo.leipzig.de/bi/vo020.asp?VOLFDNR=1007392 + li Beispiel: https://ratsinformation.leipzig.de/allris_leipzig_public/vo020?VOLFDNR=1007392 li Anfrage: Frage einer Fraktion oder einzelner Stadträte an die Verwaltung, die entweder mündlich in der Ratssitzung oder schriftlich beantwortet wird ul - li Beispiel: https://ratsinfo.leipzig.de/bi/vo020.asp?VOLFDNR=1009259 + li Beispiel: https://ratsinformation.leipzig.de/allris_leipzig_public/vo020?VOLFDNR=1009259 li Einwohneranfrage: Fragen von Leipziger Bürger an der Verwaltung. Wie solche gestellt werden können, ist hier beschrieben. ul - li Beispiel: https://ratsinfo.leipzig.de/bi/vo020.asp?VOLFDNR=1009373 + li Beispiel: https://ratsinformation.leipzig.de/allris_leipzig_public/vo020?VOLFDNR=1009373 li schriftliche Antwort zur Anfrage: die Reaktion auf die Anfrage zum Nachlesen (mündliche Antworten werden nicht dokumentiert) ul - li Beispiel: https://ratsinfo.leipzig.de/bi/vo020.asp?VOLFDNR=1009309 + li Beispiel: https://ratsinformation.leipzig.de/allris_leipzig_public/vo020?VOLFDNR=1009309 li Wichtige Angelegenheit: Beschlussvorlage, die, aus Sicht des Einreichers, mit hoher Priorität zu bearbeiten ist, da sonst bei Verzug mit Nachteilen zu rechnen ist ul - li Beispiel: https://ratsinfo.leipzig.de/bi/vo020.asp?VOLFDNR=1004172 + li Beispiel: https://ratsinformation.leipzig.de/allris_leipzig_public/vo020?VOLFDNR=1004172 li Wichtige Angelegenheit: Beschlussvorlage, die, aus Sicht des Einreichers, mit höherer Priorität zu bearbeiten ist, da sonst bei Verzug mit Nachteilen zu rechnen ist ul - li Beispiel: https://ratsinfo.leipzig.de/bi/vo020.asp?VOLFDNR=1004172 + li Beispiel: https://ratsinformation.leipzig.de/allris_leipzig_public/vo020?VOLFDNR=1004172 li Reaktionen ul li Verwaltungsstandpunkt: Stellungnahme der Verwaltung bezüglich einer Beschlussvorlage, einer Anfrage oder eines Antrags, die eine Empfehlung hinsichtlich der weiteren Bearbeitung abgibt: ul li Zustimmung / Zustimmung mit Ergänzung: der ursprünglichen Beschlussvorlage wird im Prinzip von der Verwaltung zugestimmt, so dass sie aus Sicht der Verwaltung zur Abstimmung gegeben werden kann ul - li Beispiel: https://ratsinfo.leipzig.de/bi/vo020.asp?VOLFDNR=1009051 + li Beispiel: https://ratsinformation.leipzig.de/allris_leipzig_public/vo020?VOLFDNR=1009051 li Ablehnung / Ablehnung, da bereits Verwaltungshandeln: die Verwaltung empfiehlt, die Beschlussvorlage oder Antrag abzulehnen, weil entweder die Nachteile, die bei Umsetzung entstehen würden, zu groß wären oder die Forderungen aus der Vorlage aus Sicht der Verwaltung schon so umgesetzt sind ul - li Beispiel: https://ratsinfo.leipzig.de/bi/vo020.asp?VOLFDNR=1008608 + li Beispiel: https://ratsinformation.leipzig.de/allris_leipzig_public/vo020?VOLFDNR=1008608 li Alternativvorschlag die Verwaltung empfiehlt, die Beschlussvorlage oder Antrag mit ihren enthaltenen Lösungsvorschlägen abzulehnen, stimmt aber der geschilderten Problemlage zu und präsentiert deswegen ihrerseits Vorschläge, um dieser abzuhelfen. Diese könnten in Folge vom ursprünglichen Antragsteller oder jemand anderen aufgegriffen werden und in Form einer Änderung oder Neufassung der ursprünglichen Vorlage wieder zur Diskussion gestellt werden ul - li Beispiel: https://ratsinfo.leipzig.de/bi/vo020.asp?VOLFDNR=1009001 + li Beispiel: https://ratsinformation.leipzig.de/allris_leipzig_public/vo020?VOLFDNR=1009001 li Sachstandsbericht: es wird der aktuelle Lage geschildert, ohne diese zu werten oder eine Empfehlung auszusprechen. Diese Informationen könnten in Folge vom ursprünglichen Antragsteller oder jemand anderen aufgegriffen werden und in Form einer Änderung oder Neufassung der ursprünglichen Vorlage wieder zur Diskussion gestellt werden. ul - li Beispiel: https://ratsinfo.leipzig.de/bi/vo020.asp?VOLFDNR=1008613 + li Beispiel: https://ratsinformation.leipzig.de/allris_leipzig_public/vo020?VOLFDNR=1008613 li Änderungsantrag: die ursprüngliche Vorlage wird in einzelnen Punkten abgeändert bzw. der Beschlussvorschlag aus durch einen Vorschag ersetzt. Üblicherweise werden Änderungsanträge von jemand anderen als dem Verfasser der Ursprungsvorlage formuliert, während Neufassung vom ursprünglichen Vorlagen-Einreicher kommen. ul - li Beispiel: https://ratsinfo.leipzig.de/bi/vo020.asp?VOLFDNR=1008935 + li Beispiel: https://ratsinformation.leipzig.de/allris_leipzig_public/vo020?VOLFDNR=1008935 li Neufassung: die ursprüngliche Vorlage wird durch diese Vorlage ersetzt. Dies geschieht in Regel als Antwort auf die Reaktionen auf die ursprüngliche Vorlage. Üblicherweise werden Neufassungen vom Verfasser der Ursprungsvorlage formuliert, während Änderungsanträge von anderen Antragstellern eingereicht werden. ul - li Beispiel: https://ratsinfo.leipzig.de/bi/vo020.asp?VOLFDNR=1009383 + li Beispiel: https://ratsinformation.leipzig.de/allris_leipzig_public/vo020?VOLFDNR=1009383 li Informationsvorlage: Information aus der Stadtverwaltung zur allgemeinen Kenntnisnahme in den Gremien, bedarf selbst keiner Abstimmung ul - li Beispiel: https://ratsinfo.leipzig.de/bi/vo020.asp?VOLFDNR=1008870 + li Beispiel: https://ratsinformation.leipzig.de/allris_leipzig_public/vo020?VOLFDNR=1008870 li Petition: Gesuch oder Beschwerde eines Bürgers an die Verwaltung, mehr Informationen in Wikipedia. Wie in Leipzig Petitionen eingereicht werden können, ist hier beschrieben. Die so gestellten Petitionen werden vom Petitionsausschuss behandelt. ul - li Beispiel: https://ratsinfo.leipzig.de/bi/vo020.asp?VOLFDNR=1007811 + li Beispiel: https://ratsinformation.leipzig.de/allris_leipzig_public/vo020?VOLFDNR=1007811 li Vorlagenstruktur ul li Sachverhalt: Schilderung der aus Sicht des Antragsstellers bestehende Problemlage @@ -95,7 +95,7 @@ html li zur Kenntnis genommen: meistens bezogen auf eine Informationsvorlage oder einem Verwaltungsstandpunkt, die von einem Gremium nur zur Kenntnis genommen werden soll (und damit nicht unbedingt einer Abstimmung bedarf), kann aber auch ein Vorstadium sein, um die Stadträte darauf aufmerksam zu machen, dass sie sich z.B. Gedanken zur Beantwortung einer Anfragen machen sollen. li Lesung (1. Lesung, 2. Lesung): Beratung / Diskussion in einem Gremium / in einer Stadtratssitzung. Es kann maximal bis zu zwei Lesungen in einem Gremium geben, eine Vorlage kann aber in mehreren Gremien beraten werden, die alle jeweils einen Beschlussvorschlag abgeben können. li Anhörung: um die eventuell weiterreichenden Folgen einer Beschlussvorlage im Vorfeld besser abschätzen zu können, gibt es öffentliche Anhörungen, an die potenziell betroffenen Bevölkerungsgruppen teilnehmen können. Die Beschlussvorlage wird ihnen vorgestellt und sie können direktes Feedback geben. Siehe auch den Antrag der FDP-Fraktion für die Einführung eines Anhörungsverfahrens - li Beschlussfassung: die eigentliche Abstimmung über den Beschluss in der Stadtratssitzung bzw. in einem beschlussfähigem Ausschuss. AKtuelle Beschlüsse können hier eingesehen werden. + li Beschlussfassung: die eigentliche Abstimmung über den Beschluss in der Stadtratssitzung bzw. in einem beschlussfähigem Ausschuss. AKtuelle Beschlüsse können hier eingesehen werden. ul li zurückgestellt: über die Vorlage wird zu einem späteren Zeitpunkt abgestimmt li ungeändert beschlossen: der Vorlage (kann auch eine Neufassung oder Änderung sein) wurde von einer Mehrheit der Stadträte zugestimmt @@ -104,7 +104,7 @@ html li zurückgezogen: der Einreicher hat sich entschieden, seine Vorlage nicht mehr zur Abstimmung zu stellen li Protokoll / Protokollauszug: zum Teil werden Sitzungsprotokolle oder zu mindestens Auszüge daraus öffentlich verfügbar gemacht ul - li Beispiel: https://ratsinfo.leipzig.de/bi/vo021.asp?topSelected=1072868 + li Beispiel: https://ratsinformation.leipzig.de/bi/vo021.asp?topSelected=1072868 li Gremium ul li Stadtrat (Organ): besteht aus den Stadträten und dem Bürgermeister als Vorsitzenden, siehe auch den Beitrag in Wikipedia @@ -112,6 +112,6 @@ html li Faktion: ist eine freiwilliger Zusammenschluss von Stadträten, die so besser gemeinsame Interessen und Ziele durchsetzen können, siehe auch den Beitrag in der Wikipedia. In Leipzig sind aktuell diese Fraktionen vertreten. li Ratsversammlung: findet einmal im Monat im Sitzungssaals des Rathaus statt und ist durch Tagungsordnungspunkte (TOP) strukturiert. li Ältestenrat: besteht aus Faktionsvorsitzende sowie dem Oberbürgermeister als Vorsitzenden, berät den Oberbürgermeister hinsichtlich Tagesordnung und Verhandlungsständen - li Ausschuss: Untergremium des Stadtrats, um ein bestimmtes politisches oder fachliches Thema abzudecken. Besteht neben Mitgliedern aus dem Stadtrat auch aus sachkundigen Einwohnern. Es gibt beschließende und beratende Ausschüsse, wie hier für Leipzig beschrieben. Alle Ausschüsse in Leipig sind hier aufgelistet. Ausschüsse sollen den Stadtrat entlasten. + li Ausschuss: Untergremium des Stadtrats, um ein bestimmtes politisches oder fachliches Thema abzudecken. Besteht neben Mitgliedern aus dem Stadtrat auch aus sachkundigen Einwohnern. Es gibt beschließende und beratende Ausschüsse, wie hier für Leipzig beschrieben. Alle Ausschüsse in Leipig sind hier aufgelistet. Ausschüsse sollen den Stadtrat entlasten. li Beirat: Ansprechpartner für die von ihnen vertretenen Interessensgruppen. Beraten Stadtrat, Ausschüsse, Stadt-Verwaltung, Institutionen, Verbände und soziale Einrichtungen im Stadtgebiet hinsichtlich spezifischer Probleme ihrer Klientel. Erarbeitet auch Lösungsvorschläge und unterstützt bei der Planung deren Umsetzung. Besteht neben Mitgliedern aus dem Stadtrat auch aus sachkundigen Einwohnern. In Leipzig existieren für jeden Stadtbezirk so genannte Stadtbezirksbeiräte, die die Interessen eben dieser Bezirke vertreten. Deneben gibt es noch die Ortschaftsräte und die Fachbeiräte. li Dezernat: Abteilung in der Stadtverwaltung mit bestimmter sachlicher Zuständigkeit, siehe auch Wikipedia diff --git a/app/views/application/impressum.html.slim b/app/views/application/impressum.html.slim index 1a740ee..fb29a3f 100644 --- a/app/views/application/impressum.html.slim +++ b/app/views/application/impressum.html.slim @@ -13,7 +13,7 @@ html h5#content = 'Inhalt' div | Im Rahmen unseres wöchentlichen Treffens im OKLab Leipzig haben wir - einen Aufsatz auf das offizielle Leipziger Ratsinformationssystem + einen Aufsatz auf das offizielle Leipziger Ratsinformationssystem entwickelt, welcher dieses besser durchsuchbar machen soll. h5#programming = 'Programmierung' ul @@ -25,5 +25,5 @@ html li = link_to 'Web Anwendung Source Code', 'https://github.com/CodeforLeipzig/stadtratmonitor' li = link_to 'Scraper Source Code', 'https://github.com/jrlover/city_council_leipzig_recent_papers' li = link_to 'Scraper Ausführung', 'https://morph.io/jrlover/city_council_leipzig_recent_papers' - li = link_to 'Leipziger Ratsinformationssystem (Quelle)', 'https://ratsinfo.leipzig.de/' + li = link_to 'Leipziger Ratsinformationssystem (Quelle)', 'https://ratsinformation.leipzig.de/' li = link_to 'Impressum unserer Organisation Code for Germany (das auch für dieses Seite gelten soll)', 'https://codefor.de/impressum/' diff --git a/config/environments/development.rb b/config/environments/development.rb index 99e1321..340b77e 100644 --- a/config/environments/development.rb +++ b/config/environments/development.rb @@ -40,5 +40,5 @@ Rails.application.configure do # flush stdout in order to get logs in realtime $stdout.sync = true - #config.hosts = "stadtratmonitor.codeforleipzig.de" + config.hosts = ENV['APPLICATION_HOST'] || 'localhost' end diff --git a/config/environments/production.rb b/config/environments/production.rb index 265f1d2..64144c8 100644 --- a/config/environments/production.rb +++ b/config/environments/production.rb @@ -76,5 +76,5 @@ Rails.application.configure do # Do not dump schema after migrations. config.active_record.dump_schema_after_migration = false - config.hosts = "stadtratmonitor.codeforleipzig.de" + config.hosts = ENV['APPLICATION_HOST'] || 'stadtratmonitor.leipzig.codefor.de' end diff --git a/docker-compose.yml b/docker-compose.yml index 0ddb81e..9e3afb9 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -1,8 +1,7 @@ version: "3.7" -volumes: - elasticsearch: services: web: + user: srm build: . volumes: - .:/app @@ -11,18 +10,28 @@ services: links: - elasticsearch environment: - ELASTICSEARCH_URL: 'http://elasticsearch:9200' + - ELASTICSEARCH_URL=http://elasticsearch:9200 + - APPLICATION_HOST=$APPLICATION_HOST + command: sh -c "cd /home/srm/app && bundle exec puma -C config/puma.rb" elasticsearch: + user: elasticsearch build: ./docker/elasticsearch environment: - discovery.type=single-node + - bootstrap.memory_lock=true + - "ES_JAVA_OPTS=-Xms512m -Xmx512m" ports: - - "9200:9200" + - "9215:9200" volumes: - - elasticsearch:/usr/share/elasticsearch/data + - $ESDATA:/usr/share/elasticsearch/data //read, write and execute + - ./docker/elasticsearch/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml + command: sh -c "/usr/share/elasticsearch/bin/elasticsearch" elastichq: image: elastichq/elasticsearch-hq ports: - "5000:5000" links: - elasticsearch + +volumes: + esdata: diff --git a/docker/elasticsearch/elasticsearch.yml b/docker/elasticsearch/elasticsearch.yml new file mode 100644 index 0000000..921addf --- /dev/null +++ b/docker/elasticsearch/elasticsearch.yml @@ -0,0 +1,12 @@ +# Set the bind address to a specific IP (IPv4 or IPv6): +# +network.host: 0 +# +# Set a custom port for HTTP: +# +#http.port: 9200 + +# Pass an initial list of hosts to perform discovery when this node is started: +# The default list of hosts is ["127.0.0.1", "[::1]"] +# +#discovery.seed_hosts: []