Sistema de Información de Violencia Política en Línea versión 2
Tecnologías, versiones y permisos. Ver https://github.com/pasosdeJesus/sip/wiki/Requisitos
Es una aplicación que emplea 3 motores genéricos:
-
Desarrollo personalizado: sivel2_gen
-
Nube: heb412_gen
-
Actualización sip
Cree un usuario para PostgreSQL como se explica en https://github.com/pasosdeJesus/sip/wiki/Aplicaci%C3%B3n-de-prueba (si deja el nombre sipdes se le facilitarán los siguientes pasos)
- Ubique fuentes por ejemplo en
/var/www/htdocs/sivel2/
- Asegurse que las gemas quedan en
/var/www/bundler/
siguiendo instrucciones de http://pasosdejesus.github.io/usuario_adJ/conf-programas.html#ruby - Instale gemas requeridas con:
bundle install
si se interrumpe por problemas de permisos en instalación de una gema, instalela como en el siguiente ejemplo (cambiando la gema y la versión):
doas gem install --install-dir /var/www/bundler/ruby/2.6/ bindex -v 0.7.0
y continúe con bundle install
- Copie y de requerirlo modifique las plantillas:
find . -name "*plantilla"
for i in `find . -name "*plantilla"`; do
n=`echo $i | sed -e "s/.plantilla//g"`;
if (test ! -e $n) then {
echo $n;
cp $i $n;
} fi;
done
Estas plantillas dejan la aplicación en el URL /sivel2/ (tendría que modificarlas si prefiere una raiz de URL diferente, ver sección 'Punto de montaje' de https://github.com/pasosdeJesus/sip/wiki/Personalizaci%C3%B3n-de-rutas,-controladores-y-vistas ). Asegurese de establecer usuario y base de datos que configuró en PostgreSQL en config/database.yml.
- Las migraciones del directorio
db/migrate
desivel2_gen
permiten migrar una SIVeL 1.2, actualizando estructura y agregando datos que hagan falta. Para actualizar un SIVeL 1.2 saque copia a la base, configure datos de la copia enconfig/database.yml
y ejecute:
bin/rails db:migrate
bin/rails sip:indices
Si va a empezar con una base nueva sivel2gen_des como usuario de PostgreSQL sipdes:
createdb -U sipdes -h /var/www/var/run/postgresql/ sivel2gen_des
y desde el directorio de la aplicación:
bin/rails db:setup
bin/rails sip:indices
- Lance la aplicación en modo de desarrollo con:
bin/rails s
- Examine con un navegador que tenga habilitadas las galletas (cookies) en el
puerto 3000:
http://127.0.0.1:3000
. Por eso si usa el navegadorw3m
añada la opción-cookie
- Cuando requiera detener basta que de Control-C o que busque el
proceso con ruby que corre en el puerto 3000 y lo elimine con
kill
:
ps ax | grep "ruby.*3000"
kill 323122
- En este modo es recomendable borrar recursos precompilados
rm -rf public/assets/*
Dado que se hacen pruebas a modelos, rutas, controladores y vistas en
sivel2_gen
, en sivel2
sólo se implementan algunas pruebas
de regresión con capybara-webkit. Si ya configuró el servidor de desarrollo
como se explicó antes, basta ejecutarlas con:
RAILS_ENV=test bundle exec rake db:reset
RAILS_ENV=test bundle exec rake sip:indices
bundle exec rails test
Opera bien excepto por la lentitud (aunque es más rápido que otros sitios
de desarrollo) y porque no puede usarse capybara-webkit
.
Para tener menos de 10000 registros en base de datos se han eliminado ciudades de Colombia y Venezuela. Podrá ver departamentos/estados y municipios.
Los anexos son volatiles pues tuvieron que ubicarse en /tmp/
(que se
borra con periodicidad).
En tiempo de ejecución el uso de heroku se detecta en
config/initializers/sivel2_gen
usando una variable de entorno
--que cambia de un despliegue a otro y que debe examinarse con
heroku config
Para que heroku solo instale las gemas de producción:
heroku config:set BUNDLE_WITHOUT="development:test"
Otras labores tipicas son:
- Para iniciar interfaz Postgresql:
heroku pg:psql
- Para ejecutar migraciones faltantes:
heroku run rake db:migrate
- Para examinar configuración
heroku config
que entre otras mostrará URL y nombre de la base de datos. - Heroku usa base de datos de manera diferente, para volver a inicializar
base de datos (cuyo nombre se ve con
heroku config
):
heroku pg:reset nombrebase
En el archivo TIEMPO.md se han consignado algunas mediciones de tiempo de respuesta medidos con el inspector del navegador Chrome (una vez en la página de ingreso a SIVeL, botón derecho Inspeccionar Elemento, pestaña Network). En ese archivo se ha consignado el tiempo de cada prueba junto con el servidor y el cliente usado.
- Se recomienda que deje fuentes en
/var/www/htdocs/sivel2
- Siga los mismos pasos para configurar un servidor de desarrollo --excepto lanzar
- Cree la base de datos
sivel2gen_pro
con dueñosipdes
. Por ejemplo en adJ desde el usuario_postgresql
:
createdb -Upostgres -h/var/www/var/run/postgresql -Osipdes sivel2gen_pro
- Edite credenciales cifradas con:
EDITOR=vim bin/rails credentials:edit
y con
RAILS_ENV=production EDITOR=vim bin/rails credentials:edit
- Configure la misma base de datos de un SIVeL 1.2 en sección
production
deconfig/databases.yml
y ejecute
RAILS_ENV=production bin/rails db:setup
RAILS_ENV=production bin/rails db:migrate
RAILS_ENV=production bin/rails sip:indices
- Como servidor web recomendamos nginx, en la sección http agregue:
upstream unicorns2 {
server 127.0.0.1:2009 fail_timeout=0;
}
- Y agregue también un dominio virtual (digamos
sivel2.pasosdeJesus.org
) con:
server {
listen 443;
ssl on;
ssl_certificate /etc/ssl/server.crt;
ssl_certificate_key /etc/ssl/private/server.key;
root /var/www/htdocs/sivel2/;
server_name sivel2.pasosdeJesus.org
error_log logs/s2error.log;
location ^~ /assets/ {
gzip_static on;
expires max;
add_header Cache-Control public;
root /var/www/htdocs/sivel2/public/;
}
try_files $uri/index.html $uri @unicorn;
location @unicorn {
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header Host $http_host;
proxy_redirect off;
proxy_pass http://unicorns2;
error_page 500 502 503 504 /500.html;
client_max_body_size 4G;
keepalive_timeout 10;
}
}
- Precompile los recursos
bin/rails assets:precompile
- Tras reiniciar nginx, inicie unicorn desde directorio con fuentes con algo como (cambiando la llave):
DIRAP=/var/www/htdocs/sivel2 USUARIO_AP=$USER SECRET_KEY_BASE=9ff0ee3b245d827293e0ae9f46e684a5232347fecf772e650cc59bb9c7b0d199070c89165f52179a531c5c28f0d3ec1652a16f88a47c28a03600e7db2aab2745 ./bin/u.sh
- Para iniciar en cada arranque, por ejemplo en adJ cree /etc/rc.d/sivel2
servicio="DIRAP=/var/www/htdocs/sivel2 RAILS_RELATIVE_URL_ROOT=/ USUARIO_AP=$USER SECRET_KEY_BASE=9ff0ee3b245d827293e0ae9f46e684a5232347fecf772e650cc59bb9c7b0d199070c89165f52179a531c5c28f0d3ec1652a16f88a47c28a03600e7db2aab2745 /var/www/htdocs/sivel2/bin/u.sh"
. /etc/rc.d/rc.subr
rc_check() {
ps axw | grep "[r]uby.*unicorn_rails .*sivel2" > /dev/null
}
rc_stop() {
p=`ps axw | grep "[r]uby.*unicorn_rails.*master .*sivel2" | sed -e "s/^ *\([0-9]*\) .*/\1/g"`
kill $p
}
rc_cmd $1
E incluya sivel2
en la variable pkg_scripts
de /etc/rc.conf.local
- Detenga el servidor de desarrollo (teclas Control-C)
- Actualice fuentes:
git pull
- Instale nuevas versiones de gemas requeridas:
bundle install
- Aplique cambios a base de datos:
rake db:migrate
- Actualice tablas básicas:
rake sivel:actbasicas
- Actualice índices:
rake sip:indices
- Lance nuevamente el servidor de desarrollo:
rails s
Son practicamente los mismos pasos que emplea para actualizar servidor de desarrollo, excepto que unicorn se detiene con pkill y se inica como se describió en Despliegue y que debe preceder cada rake con
RAILS_ENV=production
En el sitio de producción se recomienda agregar una tarea cron con:
cd /var/www/htdocs/sivel2/; RAILS_ENV=production bin/rake sivel2:vuelca
Las mismas de sip
. Ver https://github.com/pasosdeJesus/sip/wiki/Convenciones
Vladimir Tamara - Desarrollo - vtamara
Además, cabe resaltar que se ha contado algunos contribuyentes quienes han participado en este proyecto.