sábado, 29 de diciembre de 2018

Laravel Request personalizado: cómo obtener el ID del Modelo basado en Route Model Binding

Resulta que acabas de crear un Request para la validación de un formulario y ejecutaste un comando de php artisan para hacer un Request:


php artisan make:request tests\\books\\UpdateBookRequest

Entonces, has creado un nuevo Request, pero resulta que en tus validaciones, necesitas tener a la mano el ID de tu modelo.

En mi caso, necesito el ID para especificar a la regla de UNIQUE, cuando estoy actualizando un registro, a que no considere el ID en cuestión, porque si no, Laravel Validation me saldrá con que ese registro ya ha sido tomado.

Es decir, en mis reglas de validación, yo tenía el siguiente código:
$request->validate([
            'title' =>  'required',
            'isbn'  =>  'required|unique:books,isbn,'.$book->id,
            'description' =>    'max:2000',
        ]);

Pero después de crear mi Request, ahora cómo le hago para acceder a ese ID?

Ah pues, debo hacer la siguiente modificación
    public function rules()
    {
        $book = $this->route('book');//https://stackoverflow.com/a/49745633/1883256
        return [
            'title' =>  'required',
            'isbn'  =>  'required|unique:books,isbn,'.$book->id,
            'description' =>    'max:2000',
        ];
    }

Referencias: https://stackoverflow.com/a/49745633/1883256.

Cómo añadir tipo de archivo de Laravel Blade a PHPStorm

Normalmente estaba yo buscando cómo agregar un nuevo archivo blade de Laravel en PHPStorm. Resulta que no hay como tal, por lo que logré descubrir cómo agregar el tipo de archivo de Laravel Blade dentro del menú de creación de nuevo archivo blade.

Hay que poner botón derecho y elegir "New". Elegimos la opción "Edit File Templates... "

Cómo añadir tipo de archivo de Laravel Blade a PHPStorm 1 
Le damos un nombre, en este caso yo puse "Laravel Blade" y como extensión o tipo de archivo "blade.php".
Cómo añadir tipo de archivo de Laravel Blade a PHPStorm 2 
Y pues damos en OK y ya quedó.


Cómo añadir tipo de archivo de Laravel Blade a PHPStorm 3 

Cómo añadir tipo de archivo de Laravel Blade a PHPStorm 4 


Es todo 😁!

viernes, 28 de diciembre de 2018

Laravel blade pagination cómo cambiar el CSS

Laravel por default utiliza el framework CSS de Bootstrap para la paginación. Pero ¿qué pasa si estás utilizando otro Framework, llámese Bulma, Material Design, Foundation, Semantic UI, etc?

Lo que tienes que hacer básicamente, es pedirle a Laravel que genere un archivo blade en donde se pueda llevar a cabo las modificaciones CSS que necesites para modificar los enlaces de la paginación:

php artisan vendor:publish --tag=laravel-pagination

Laravel generará una nueva carpeta de archivos blade dentro de la carpeta /resources/views/pagination el cual contendrá varios archivos CSS de diversos Frameworks. En este caso estoy utilizando "Semantic UI", por lo que, para decirle a Laravel que la paginación la quiero con dicho Framework, hay que indicarlo en el Service Provider; es decir, modificar el archivo app\Providers\AppServiceProvider.php

    public function boot()

    {

        //Default Paginator

        Paginator::defaultView('vendor.pagination.semantic-ui');
    }


Referencias:
https://laravel.com/docs/5.7/pagination#manually-creating-a-paginator

viernes, 21 de diciembre de 2018

Actualizar Laravel Homestead en Mac Mojave - resumido

Te puede interesar:

Acciones previas

  1. Primero toma nota de las bases de datos que debes respaldar. En mi caso tengo instalado el phpmyadmin, por lo que, utilizando dicho programa, realizo mis respaldos.
  2. Haz una copia de tu archivo Homestead.yaml que se encuentra generalmente dentro del directorio
    1
    /home/user/Homestead/Homestead.yaml

Procedimiento

Dentro del directorio mencionado, paramos la máquina virtual


$ vagrant halt

Nos vamos un directorio arriba


$ cd ..

Checamos el estado de vagrant


$ vagrant global-status

Podemos aprovechar aquí para actualizar Vagrant y VirtualBox. En este caso, estoy actualizando a Vagrant 2.2.2 y a VirtualBox 6.0.  Se recomienda reiniciar la computadora una vez actualizados.

Para comprobar las versiones con las que contamos tanto de Vagrant como de VirtualBox:


$ vagrant -v

$ vboxmanage --version

Ahora sí, vamos a destruir el box de laravel homestead que tenemos actualmente:


$ vagrant destroy

Si no destruye nada, entonces debes especificar el ID de la máquina a destruir, dicho ID lo visualizas con

$ vagrant global-status


$ vagrant destroy [identificador]

Suponiendo que ya tienes una copia de la carpeta /Homestead en otro lado o del archivo de Homestead.yaml, procedemos a borrar la carpeta:


$ rm -rf Homestead

Ahora listamos las cajas de vagrant con


$ vagrant box list

Borramos todas, bueno, en mi caso, no las necesito ya. En mi caso borro la de la versión 6.3.0


$ vagrant box remove laravel/homestead --box-version=6.3.0

Reinstalación de Laravel Homestead en MacOS Mojave

Estando en el directorio Home, ejecutamos el siguiente comando


$ vagrant box add laravel/homestead

Nos pedirá especificar qué VM vamos a utilizar, en mi caso es la opción 3) de VirtualBox. Y esperamos a que baje.

==> box: Successfully added box 'laravel/homestead' (v6.4.0) for 'virtualbox'!

Siguiendo dentro del directorio /home/user/ aplicamos el siguiente comando:
$ git clone https://github.com/laravel/homestead.git ~/Homestead

El cual va a crear una nueva carpeta llamada /Homestead. Vamos a esa carpeta:

$ cd Homestead

Ahora ejecutamos los siguientes comandos:
$ git checkout v7.18.0
$ bash init.sh

Este último creará el archivo Homestead.yaml el cual tendremos que editar de nuevo a como lo teníamos anteriormente. Es por ello que respaldamos ese archivo previamente.

Finalmente, para probar que todo funciona, ejecutamos (dentro del directorio /Homestead):
$ vagrant up

Entra a tu máquina virtual con

$vagrant ssh

Para salir:
$ exit

Para detener la máquina virtual de Laravel Homestead:
$ vagrant halt

Referencias:

https://laravel.com/docs/5.7/homestead#installation-and-setup



martes, 18 de diciembre de 2018

¿Cuándo volverá a ser campeón el cruz azul?

Yo creo que cuando el cruz azul esté jugando bien y que el América no llegue a la final, ya es una buena señal de que ahora sí será campeón el Cruz Azul.

Suena sencilla mi respuesta, pero detrás hay una combinación muy compleja de intereses (conflictos de interés) de maldiciones, de auto percepción, de sugestión, etc.

¿Hasta cuándo jugará el quinto partido de un mundial la selección mexicana de futbol?

Yo creo que hasta el mundial del 2026.

En 2022 será más de lo mismo.

Ya hemos visto que no sirve de nada tener a jugadores mexicanos en Europa.

La selección mexicana de futbol llegará al quinto partido en 2026. En 2022 no lo hará, eso ya es histórico:

México 86 : eliminados en el quinto partido [LOCAL]
USA 94 : eliminados en el cuarto partido.
France 98: eliminados en el cuarto partido.
Japón & Corea 2002: eliminados en el cuarto partido.
Alemania 2006: eliminados en el cuarto partido.
Sudáfrica 2010: eliminados en el cuarto partido.
Brasil 2014: eliminados en el cuarto partido.
Rusia 2018: eliminados en el cuarto partido.
Qatar 2022: eliminados en el cuarto partido.
Mexico-USA-Canada 2026: eliminados en el quinto partido. [LOCAL]

Por lo que la respuesta a la pregunta de ¿Hasta cuándo jugará el quinto partido de un mundial la selección mexicana de futbol?
Respuesta: hasta el mundial del 2026.

Históricamente ¿tiene sentido realmente ir a los mundiales de futbol para apoyar a la selección mexicana y frustrarse?
Como aficionado a la selección mexicana, deberían renunciar a la selección mexicana tal y como este aficionado (entrando en razón) lo hace:


Ir a Qatar 2022 será tirar tu dinero a la basura. Mejor vete a la playa a disfrutar!

martes, 11 de diciembre de 2018

Cómo eliminar un usuario y todos sus archivos y privilegios en CentOS 7

Básicamente hay dos pasos

1.- Borrar el usuario de CentOS 7

De preferencia, nos conectamos como root
$ su

Lo siguiente borra el usuario, así como todos sus archivos.
#userdel -r [nombreDeUsuarioABorrar]

Si quieres conservar sus archivos, quita el -r
#userdel [nombreDeUsuarioABorrar]

2.- Eliminar los privilegios del usuario de CentOS 7

Ahora hay que editar el siguiente archivo de los privilegios:

#visudo

Se abrirá un archivo de configuración en donde deberás localizar el [nombreDeUsuarioABorrar] y borrar la línea, por ejemplo:
(teclear primero la tecla i)

[nombreDeUsuarioABorrar]   ALL=(ALL:ALL) ALL

Una vez borrada esa línea, presionar la tecla "Esc", luego la tecla : seguida de w y q, es decir:
:wq

donde w = write
y q = quit


Saludos.

lunes, 12 de noviembre de 2018

Instalación de Laravel en CentOS 7 con Nginx y Bitbucket

Hay varios detalles los que hay que hacer. Para efectos prácticos asumiré que ya tienes instalado Nginx 1.14, con PHP 7.2 y MySQL 8.

En este caso me voy a situar en /var/www/html/

# cd /var/www/html

y ahí mismo hago un git clone de mi proyecto laravel que está en Bitbucket
# git clone https://bitbucket.org/mi/proyecto/laravel.git

Ahora lo que tengo que hacer es cambiar el dueño de esa carpeta de Laravel:

# chown -R nginx:nginx laravel/

Ahora hay que cambiar los permisos de los archivos
# find /var/www/html/laravel-5.7/ -type f -exec chmod 640 {} \;

Cambiar los permisos de los directorios:
# find /var/www/html/laravel-5.7/ -type d -exec chmod 750 {} \;

Proceder a Instalar laravel y dependencias de nuestro proyecto
# composer install --no-dev

Configurar los permisos de SELINUX
# semanage fcontext -a -t httpd_sys_rw_content_t "/var/www/html/laravel/storage(/.*)?"

# semanage fcontext -a -t httpd_sys_rw_content_t "/var/www/html/laravel/bootstrap/cache(/.*)?"

# restorecon -Rv /var/www/html/

# semanage boolean -m httpd_can_network_connect_db --on

Reiniciar los servicios para que los cambios surtan efecto:
# systemctl restart nginx

# systemctl restart php-fpm

Referencias:


  • https://www.linkedin.com/pulse/selinux-laravel-framework-rodrigo-alvares
  • https://stackoverflow.com/a/51826584/1883256
  • https://stackoverflow.com/a/47951278/1883256


Nada que ver pero sí con permisos de bases de datos con laravel:

  • https://laracasts.com/discuss/channels/general-discussion/mysql-database-user-grant-permissions-for-laravel
  • https://github.com/shavitush/bhoptimer/issues/20


Configuración de dominios y sitios web con Nginx en CentOS 7

Asumo que ya tienes instalado tanto Nginx en un servidor con CentOS 7 y que puedes acceder a modo root.

Accedemos a modo root:

$ su

Vamos a la carpeta de Nginx y vemos lo que hay:

# cd /etc/nginx

# ll

Debemos tener ahí dos carpetas, una que se llame "sites-available" y la otra "sites-enabled". En resumen, la primera sirve para colocar ahí los directorios preferentemente con el nombre de los dominios y su respectivo archivo de configuración. El segundo simplemente tendrá un enlace simbólico (symbolic link) que son como una especie de "acceso directo" de windows el cual son prácticos ya que, con el simple hecho de eliminar un enlace simbólico, ya tienes ese sitio offline, sin necesidad de borrar los archivos de configuración.

Si no existiesen esas carpetas, hay que crearlas.

# mkdir sites-available
# mkdir sites-enabled

Vamos primero a "sites-available" y creamos nuestro primer archivo de configuración. Hay miles de maneras y configuraciones para hacerlo, al menos esta funciona para Wordpress y Laravel 5.7 en adelante.

Creamos un archivo con el siguiente nombre:
# nano misitio.com.conf

-----------------------------------------------------------------------------------------------
#Estos dos primeros bloques sólo debe ser puesto en el sitio principal. En los demás sitios ya no debe ponerse.
server {
        listen 80 default_server;
        listen [::]:80 ipv6only=on default_server;

        return http://misitio.com;
}

server {
    listen 80;
    #Abajo pon la IP que le corresponda y que esto lo redireccione a tu dominio principal
    server_name 192.168.10.3;

    return 301 $scheme://misitio.com$request_uri;
}

server {
        listen 80;
        listen [::]:80;

    # Log files for Debugging
        access_log /var/log/nginx/misitio.com.access.log;
        error_log /var/log/nginx/misitio.com.error.log;

    # Webroot Directory for Laravel project
        root /var/www/html/misitio.com;
        index index.php index.html;

        # Your Domain Name
        server_name misitio.com;

        location / {
                try_files $uri $uri/ /index.php?$query_string;
        }

    # PHP-FPM Configuration Nginx
        location ~ \.php$ {
                try_files $uri =404;
                fastcgi_split_path_info ^(.+\.php)(/.+)$;
                fastcgi_pass unix:/run/php-fpm/www.sock;
                fastcgi_index index.php;
                fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
                include fastcgi_params;
        }
        #Deny access to .htaccess files, since nginx may show them as plain text.
        location ~ /\.ht{
                deny all;
        }
        #Deny access to .git files, since nginx may show them as plain text.
        location ~ /\.git{
                deny all;
        }
}
-----------------------------------------------------------------------------------------------

Luego creamos el enlace simbólico:

# ln -s /etc/nginx/sites-available/misitio.com.conf /etc/nginx/sites-enabled/

Ahora, hay que crear carpetas dentro de /var/www/html/ para alojar ahí los archivos de configuración.

# cd /var/www/html/
# mkdir misitio.com
# cd misitio.com
# nano index.php

index.php
-----------------------------------------------------------------------------

echo 'Probando nginx con php';
-----------------------------------------------------------------------------

Reiniciamos el servidor:
# systemctl restart nginx

miércoles, 7 de noviembre de 2018

Actualizar OpenSSL en CentOS 7

Hay que seguir los siguientes pasos:

Instalar primero los siguientes paquetes:
# yum install libtool perl-core zlib-devel

Ahora hay que ir al siguiente directorio:
#  cd /usr/local/src/

Luego hay que ir a este sitio para copiar el enlace o URL del archivo a bajar. En este caso, voy a bajar el que se muestra:

# wget https://www.openssl.org/source/openssl-1.1.1.tar.gz

Lo descomprimimos:
# tar -zxf openssl-1.1.1.tar.gz

Vamos a la carpeta que fue descomprimida:
# cd openssl-1.1.1

Ejecutamos el siguiente comando:
# ./config --prefix=/usr/local/openssl --openssldir=/usr/local/openssl shared zlib

# make

# make test

# make install

Ahora procedemos a editar el archivo openssl.sh
# nano /etc/profile.d/openssl.sh

-------------------------------------------------------------------------
# /etc/profile.d/openssl.sh
pathmunge /usr/local/openssl/bin
-------------------------------------------------------------------------
 Ahora unas configuraciones adicionales:

De acuerdo a la versión que bajamos de openssl creamos el archivo:
# nano /etc/ld.so.conf.d/openssl-1.1.1.conf

Y colocamos lo siguiente:
-------------------------------------------------------------------------
# /etc/ld.so/conf.d/openssl-1.1.0g.conf
/usr/local/openssl/lib
-------------------------------------------------------------------------

# ll /etc/ld.so.conf.d/

# ldconfig -v

Y ahora sí!

# openssl version

Si no saliera, hay que salir y volver a abrir la sesión.


Referencias:



Actualizar Laravel Homestead en Windows 7 - resumido

Te puede interesar:



Antes que nada procedo a revisar el archivo C:\Users\Pathros\Homestead\Homestead.yaml
para tener una idea de las bases de datos que tengo y así decidir si procedo a respaldar o no x base de datos y
códigos fuente. Porque con la actualización, todas las BD serán eliminadas.

me paso a la carpeta C:\Users\Pathros\Homestead
Hago una copia del archivo Homestead.yaml


Regresé a C:\Users\Pathros\ y procedí a eliminar el ambiente de vagrant:

$ vagrant destroy

Verifico que ya no hay laravel homestead boxes

$ vagrant global-status

Si aplica, procedo a actualizar vagrant y virtualBox y reiniciar el equipo.

Ahora, dentro de C:\Users\Pathros procedemos a bajar la caja de vagrant, en este caso elijo la opción 3 para virtualbox.

$ vagrant box add laravel/homestead

vagrant box add laravel/homestead

viernes, 2 de noviembre de 2018

Instalar QEMU en MacOS Mojave 💻 👎🏽

Vamos a ver cómo se instala QEMU en una MacOS 💻.

Primero hay que tener instalado homebrew o brew.

Versión de brew: $ brew -v





Luego procedemos a instalar QEMU.





$ brew install qemu







Una vez instalado, procedo a crear una carpeta llamada /qemu
$ mkdir qemu
con el fin de crear ahí una imagen (disco), en el cual voy a instalar un sistema operativo Linux, digamos un CentOS 7 con LAMP.


$ qemu-img create -f qcow2 centos7.img 20G

En donde "qcow2", de acuerdo a este enlace, es un formato que incluye varias características especiales, tales como la posibilidad de tomar múltiples snapshots, encriptación AES y compresión zlib.

Ahora para comenzar con la instalación, aplicamos el siguiente comando en donde especificamos a qemu cuál es el disco de instalación y el disco destino a donde se va a instalar el sistema operativo linux CentOS 7.


$ qemu-system-x86_64 -m 4096 -boot d -smp 3 -net nic -net user -hda centos7.img -cdrom /Users/pathros/Downloads/software/CentOS-7-x86_64-Minimal-1804.iso -enable-kvm
Para entrar a la interfaz sólo colocamos el mouse dentro de la pantalla y hacemos clic. Para salir o retomar el control del mouse, utilizamos la combinación de teclas "ctrl + alt + g".

Links:


Al final de cuentas, está súper lento y me reporta algunos errores raros. Qemu en Mac 💻👎🏽😒

Falta probar lo de otro compañero:

"yo probé lubuntu , light version", "sí es rapido". "para windows hay un asistente de qemu" "qemu manager" "es un entorno gráfico como el que usted usó hace un momento"

Checar:
"VT-x" "yo tuve que hacer eso, en la configuracion del bios."
"Intel-VT y Amd-V"

Checar referencias: https://www.itzgeek.com/how-tos/linux/centos-how-tos/install-kvm-qemu-on-centos-7-rhel-7.html

Otras referencias:


  • http://freelinuxtutorials.com/tutorials/qemu-virtualization/
  • https://www.taringa.net/comunidades/unixx/5686747/Tutorial-Qemu-para-novatos.html
  • https://wiki.archlinux.org/index.php/QEMU
  • https://opensourceforu.com/2011/05/quick-quide-to-qemu-setup/
  • http://alexander.holbreich.org/qemu-kvm-introduction/
  • http://wiki.laptop.org/go/Using_QEMU_on_Windows
  • http://www.elsotanillo.net/2006/08/windows-howto-instalacion-de-qemu-en-windows-2/
  • https://www.adictosaltrabajo.com/2007/03/21/qemu-win-v-p-n/
  • https://es.scribd.com/document/388978446/QEMU-AQEMU-TUTORIAIS
  • https://www.emaculation.com/doku.php/ppc-osx-on-qemu-for-windows

jueves, 1 de noviembre de 2018

nginx: [emerg] duplicate listen options for [::]:80 in archivo.conf

Si has agregado nuevos dominios / subdominios y nuevos archivos de configuración en nginx y resulta que te encuentras con el siguiente error:

"
# nginx -t
nginx: [emerg] duplicate listen options for [::]:80 in /etc/nginx/sites-enabled/domain.com.conf:3

nginx: configuration file /etc/nginx/nginx.conf test failed
"

De acuerdo a este post, se debe a la directiva "listen [::]:80 ipv6only=on;", por lo que quité el texto o directiva "ipv6only=on" excepto en el archivo de configuración del sitio principal (default_server) y ya quedó 😎. Es decir:
----------------------
server {
        listen 80;

        listen [::]:80 ;#ipv6only=on;
#...
}
----------------------

Referencias:
https://github.com/certbot/certbot/issues/5550
Saludos 🥂

Instalar el LEMP en CentOS 7

En este artículo documentaré los pasos para instalar el LEMP más reciente (que se pueda) en un CentOS 7 y tomando en cuenta las cuestiones de seguridad más importantes o al menos las mínimas.

He consultado un montón de guías y ninguna está completa, por lo que he decidido hacer mi propia guía con naranjas y peras, santo y seña.

Este LEMP se piensa para instalar aplicaciones tanto de Laravel como de un Wordpress multisitios, manejando distintos dominios o subdominios para cada aplicación.

Cabe aclarar el significado de LEMP en este artículo:

L = Linux -> CentOS 7
E = Nginx 1.14
M = MySQL 8 (no MariaDB)
P  = PHP 7.2

martes, 23 de octubre de 2018

Cómo visualizar intentos de acceso vía SSH fallidos y exitosos al servidor CentOS 7

Para visualizar los intentos fallidos, se puede utilizar el siguiente comando (con root #)

# ausearch --message USER_LOGIN --success no --interpret --start yesterday --end now

Y para visualizar los accesos exitosos vía SSH

# ausearch --message USER_LOGIN --success yes --interpret --start yesterday --end now

Nota: esta visualización es desde ayer al día de hoy.

Para visualizar todos los accesos, sería quitar los parámetros "--start yesterday"

Referencias: https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/6/html/security_guide/sec-searching_the_audit_log_files

Saludos

viernes, 19 de octubre de 2018

CentOS 7 obtener la versión de Apache

Simplemente ejecuta el siguiente comando:

# rpm -q httpd

Referencias: https://www.centos.org/forums/viewtopic.php?t=61440

Cómo instalar phpmyadmin en CentOS 7 y acceder ahí de manera segura, segurísima

En este caso estaré instalando el phpmyadmin 4.8.3 en un CentOS con Apache 4.2.6, PHP 7.2 y MySQL 8.

Tenía problemas para instalar el phpmyadmin con un simple
# yum install phpmyadmin

Ya que había errores en las dependencias ... que había que instalar
# yum install php-zip

pero, al ejecutar tal comando, tampoco se podía, debido a un posible conflicto en los paquetes o no estaba utilizando el repo correcto, todo un despapaye ...

jueves, 18 de octubre de 2018

php mysql Connection failed: The server requested authentication method unknown to the client


Me he topado con un error utilizando MySQL 8 y PHP. Dicho error derivó de un error estableciendo una conexión con la base de datos al momento de instalar un wordpress en un CentOS 7
La siguiente sentencia de MySQL:
ALTER USER 'usuario'@'localhost' IDENTIFIED WITH mysql_native_password BY 'la contraseña valedora';
Referencias:

Laravel login Class '\App\User' not found

La solución es abrir el archivo app/config/auth.php.
Luego, ir a la parte que dice:
    'providers' => [
        'users' => [
            'driver' => 'eloquent',
            'model' => App\User::class,
        ],
Sustituirla por:
    'providers' => [
        'users' => [
            'driver' => 'eloquent',
            'model' => App\Models\User::class,
        ],

Referencias: https://stackoverflow.com/a/35822038/1883256 
Saludos. 🥂

martes, 16 de octubre de 2018

Las mejores guías para instalar Apache 2.4, PHP 7.2 y MySQL 8 en CentOS 7

Estos son los links que seguí para instalar un LAMP en CentOS 7 con las versiones (lo) más (posible) recientes:

Apache 2.4.6 y PHP 7.2

https://www.if-not-true-then-false.com/2010/install-apache-php-on-fedora-centos-red-hat-rhel/

MySQL 8

https://www.tecmint.com/install-latest-mysql-on-rhel-centos-and-fedora/


viernes, 12 de octubre de 2018

Cómo mostrar los privilegios de un usuario dado en MySQL

Primero lo que puedes hacer es generar las consultas para cada usuario con el fin de mostrar los permisos o privilegios:
SELECT CONCAT('SHOW GRANTS FOR ''',user,'''@''',host,''';') FROM mysql.user;
Luego copia la sentencia que muestra los privilegios del usuario que sea de tu interés. Por ejemplo:
SHOW GRANTS FOR 'dumper'@'localhost';
Es todo.
🤓

martes, 9 de octubre de 2018

Cómo crear un nuevo proyecto de Laravel y sincronizarlo con Bitbucket

En este caso estaré instalando un proyecto con Laravel 5.7 y utilizaré el control de versiones de Bitbucket. En este caso, estaré trabajando en MacOS. Pero debería ser similar en Windows.

Entramos a nuestra cuenta en bitbucket.org y hacemos clic en crear un nuevo repositorio:


Bitbucket - creación de un nuevo repositorio

Cómo instalar Laravel Homestead en Mac OS

Para instalar Laravel Homestead en Mac OS, primero debes bajar tanto Vagrant como VirtualBox.

Al momento de hacer este tutorial, estoy trabajando con las versiones de vagrant 2.1.5 y VirtualBox 5.2.18.

Si estás por reinstalar el laravel homestead, en mi caso, para trabajar ya con Laravel 5.7, podemos hacer una pausa y hacer unas verificaciones:

vagrant -v

jueves, 20 de septiembre de 2018

Laravel Homestead: localizar php.ini

Luego nos encontramos con errores en nuestro ambiente de desarrollo usando Laravel Homestead, tales como error en el tiempo máximo de ejecución de php o al momento de probar subir muchos archivos, enviar muchos correos y pum, error de php en el tiempo máximo de ejecución.

Evidentemente, hay que editar el archivo de configuración de php, php.ini, del Laravel Homestead que está en un Ubuntu.

Hay que meternos a la terminal con el comando:

$ vagrant ssh

De ahí, el comando que te ayuda a localizar el archivo php.ini es:

vagrant@homestead:/usr/bin$ php -i | grep "Loaded Configuration File"

Y ya te mostrará la ruta de donde se encuentra el php.ini

Saludos.

martes, 18 de septiembre de 2018

Laravel - SQLSTATE[HY000]: General error: 1364 Field doesn't have a default value

Este error sucede debido a que la columna en cuestión está marcada como "NOT NULL" en la estructura de la tabla de tu base de datos.

Quizás se te ha olvidado almacenar el valor que le corresponde a la columna que presenta problemas.

O quizás, si consideras que tal columna no es obligatoria, tienes que modificarla a "NULL".

Saludos.

sábado, 25 de agosto de 2018

Conectar Laravel a una base de datos externa de MySQL utilizando un túnel ssh con llave ssh con contraseña

Hay ocasiones en las que necesitas trabajar desde casa, hacer pruebas de conexión o cualquier otra razón.

En este caso vamos a ver cómo hacer que una aplicación de Laravel, utilizando Homestead, se pueda conectar a una base de datos de MySQL externa que está en otro servidor por medio de una llave SSH con contraseña (passphrase).

Lo que debes hacer es poner los parámetros de conexión a tu base de datos externa, dado que en este caso nos vamos a conectar a través de un túnel SSH, el host quedaría como 127.0.0.1

DB_HOST_EXTERNA=127.0.0.1
DB_PORT_EXTERNA=3307
DB_DATABASE_EXTERNA=base_de_datos_externa
DB_USERNAME_EXTERNA=usuario_base_de_datos_externa
DB_PASSWORD_EXTERNA=LaContraseña_con_caracteres_raros_///

Nótese que el puerto es 3307.

Debes entrar a la máquina virtual de Homestead con el comando:

$ vagrant ssh

Una vez dentro, abre una conexión con el siguiente comando con sus respectivos parámetros:


sudo ssh -i /home/vagrant/directorio/llave_SSH -L 3307:localhost:3306 usuario@dirección_IP

Ahora sí, prueba tu aplicación de Laravel.

Referencias:

Cómo visualizar los archivos ocultos en el Finder de Mac 💻

Para poder visualizar los archivos ocultos en el Finder de Mac, simplemente debes apretar las tres teclas siguientes:

Cmd + Shift + . (punto)

Es decir, presiono la tecla "cmd" y así la mantengo presionada, luego sigo con la tecla "shift" (la que tiene la flecha hacia arriba) y también la mantengo presionada, y al final presiono la tecla de punto .

Entonces verás que ya los archivos ocultos se muestran en el Finder.

Para volverlos a ocultar, presiona de la misma manera esas tres teclas.

Bitbucket problema en visualizar los archivos después del push origin master "Hmm... can't find that one"

Me ha ocurrido que en Bitbucket haces un "push" desde tu terminal en la compu 💻y cuando vas a tu repositorio en el sitio web de Bitbucket, pues ves el directorio de tus archivos. Hasta ahí todo bien, pero, cuando haces clic en un directorio o archivo, resulta que no hay nada.

Bitbucket Hmm... can't find that one


Entonces, vas de regreso, y resulta que ahora ya no hay nada tampoco ahí, más que el Readme.md

Bitbucket. Nada se muestra, nothing is shown when getting back from Hmm... can't find that one

Para corregir este problema, hay que ir al menú de cuenta (que está hasta abajo a la izquierda)

Bitbucket - Account - Bitbucket Labs


Elegir la opción de "Bitbucket labs" y deshabilitamos la opción que dice:
"New source browser experience"

Y la verdad esta acción resuelve el problema. 😎🎉😁🙌🏽👌🏽

Referencias:
1) https://community.atlassian.com/t5/Bitbucket-questions/quot-Hmm-can-t-find-that-one-quot-message/qaq-p/855141
2) https://bitbucket.org/site/master/issues/16793/bitbucket-may-have-lost-my-files-stuck-in

martes, 21 de agosto de 2018

Cómo ver el historial de consultas SQL en PhpMyAdmin

Si no recuerdas cuál fue una consulta SQL que se ejecutó en phpmyadmin, lo que tienes que hacer es lo siguiente.

Simplemente abre tu phpmyadmin.

En la parte inferior, casi a la izquierda, verás que hay una parte que dice "Consola"

PhpMyAdmin consola para poder ver el historial de las últimas consultas SQL ejecutadas


Haz clic ahí. Se abrirá la consola, la cual es básicamente una línea de comandos con el fondo en color blanco. En la parte superior derecha de la consola verás un menú, en el cual encontrarás "historial"

PhpMyAdmin consola para poder ver el historial de las últimas consultas SQL ejecutadas

Si le haces clic ahí en "historial", phpmyadmin te mostrará las últimas consultas en SQL ejecutadas.

Referencias: https://stackoverflow.com/a/33388150/1883256

viernes, 10 de agosto de 2018

No se han reconocido sus datos de autenticación o puede que Alfresco Content Services no esté disponible en este momento. [SOLUCIONADO]

En mi caso, este error me salió después de modificar el archivo "# nano alfresco-global.properties" y que reinicié el servicio de Alfresco, en este caso, en CentOS 7.

El problema estuvo en que, como hice copiar y pegar (copy paste) unos archivos de configuración para email, al final de cada línea quedó un espacio en blanco.

Pese a que el servicio de Alfresco fue reiniciado sin problemas, el login o acceso quedó estropeado:
No se han reconocido sus datos de autenticación o puede que Alfresco Content Services no esté disponible en este momento [SOLUCIONADO].

Entonces, lo que hice fue regresar a ese archivo de configuración y eliminé los espacios finales que habían quedado.

Volví a reiniciar y pues ya funcionó el Alfresco. 😅

lunes, 9 de julio de 2018

Laravel Eloquent Model declarar una llave primaria que no es de tipo entero

Laravel, por defecto, asume que la llave primaria es de tipo entero.  Si tienes que usar una tabla cuya llave primaria no es del tipo entero (integer), debes hacérselo saber a Eloquent, ya que si no, los valores de la llave primaria aparecerán en tu colección como cero 0.

En tu modelo debes declarar lo siguiente al principio. Por ejemplo, si tenemos User.php con llave primaria que no sea de tipo entero y si además tal columna no se llama 'id':
    protected $table = 'autores'; //nombre de la tabla
    protected $primaryKey = 'DNI'; //Nombre de la llave primaria
    public $incrementing = false; //Con esto le decimos a Laravel Eloquent de que la llave primaria no es del tipo entero.
Saludos.

Laravel Diferencia entre hasOne() y belongsTo() en una relación de 1 a 1

La verdad yo me hago bolas para saber qué columnas van en la sintaxis y en qué modelos van.

He encontrado la siguiente forma de saberlo.

Primero hay que fijarse cuál de las dos tablas tiene la columna relacional, es decir, 'relacion_id'.  Quien tenga tal columna, en el modelo correspondiente va la función belongsTo(). Y en la otra, entonces, irá la de hasOne().

Ya está.

Explicación más a detalle:

Si tenemos la tabla `empleados` a la que queremos relacionar, digamos la nómina, tendremos una tabla `nominas`. Es una relación uno a uno porque a un usuario se le paga via nómina y es de manera individual. Ni modo que un salario se reparta entre más de un empleado. Ahi, dependiendo de cómo lo estructuremos (puede ser de una u otra manera), podemos poner la columna relacional dentro de la tabla `empleados` así: 'nomina_id'.

Ahora nos preguntamos ¿quién tiene la columna relacional? la respuesta es la tabla 'empleados'. Entonces en el modelo Empleado.php se coloca la función belongsTo().

Empleado.php
public function nomina()
    {
        return $this->belongsTo(Nomina::class,'nomina_id','id'); //ID = el identificador de la tabla de `nominas`
    }
Nomina.php
Y en la tabla `nominas` se pone la función hasOne();
    public function empleado()
    {
        return $this->hasOne(Empleado::class,'nomina_id','id');//ID = el identificador de la tabla de `nominas`
    }

* Nótese que el 2do y 3er argumento de hasOne() y belongsTo() ¡tienen los mismos valores!

Saludos.

Referencias: https://laracasts.com/discuss/channels/eloquent/belongsto-and-hasone

viernes, 25 de mayo de 2018

Eloquent ORM agregar columnas adicionales cuando guardamos en relaciones muchos a muchos many-to-many

Digamos que tenemos el modelo User y el modelo Role.

Para un usuario dado se desea asociar uno o más roles, pero además deseamos guardar columnas adicionales.

Originalmente en el modelo User.php tenemos lo siguiente:
 
    public function roles()
    {
        return $this->belongsToMany('Models\User\Role','user_role')->withTimestamps();
    }

Y para el modelo Role.php tenemos lo siguiente:
    public function users()
    {
        return $this->belongsToMany('Models\User\User','user_role')->withTimestamps();
    }

viernes, 18 de mayo de 2018

Wordpress Error estableciendo una conexión con la base de datos

Estás en el proceso de instalación manual de tu wordpress, das la información en la parte de credenciales de tu base de datos

Instalación de wordpress - credenciales de la base de datos


y resulta que te aparece el error "Error estableciendo una conexión con la base de datos"

Incrementar o disminuir el tamaño de los archivos que se suben a Wordpress

Te ha pasado que quieres aumentar o disminuir la restricción del tamaño de archivos a subir en Wordpress

Wordpress modificar la restricción del tamaño de archivos a subir


Es recomendable que tengas acceso a tu servidor. En este caso, diremos que tenemos un linux CentOS 7 con Apache como servidor web.

martes, 8 de mayo de 2018

Glances: un excelente programa de monitoreo de tu servidor en Linux CentOS 7

Glances es un programa ara Linux que te muestra una especie de Dashboard con la informacion más importante de tu servidor en Linux. Lo que destaca es:

el tamaño ocupado en disco
los procesos que consumen más recursos
etc

Instalando "Glances" en CentOS 7


Además puedes ir ordenando los resultados de acuerdo a tus necesidades y en tiempo real 😎

Para instalarlo en CentOS hay que hacer lo siguiente:

Actualizar los paquetes:

Por comodidad entraré como root

$ su

# sudo yum update

Manera 1


Ahora sí, ejecutamos un script que hace todos los pasos necesarios

curl -L https://bit.ly/glances | /bin/bash

La instalación toma un rato, quizás unos 5 minutos o más 😬. Hay que ser paciente.

Manera 2:

Instala los siguientes paquetes:
# yum install python-pip python-devel

Procedemos a instalar glances:
# pip install glances

Arrancando glances

Una vez instalado, verificamos la versión
# glances -V

para ejecutarlo, simplemente teclea

# glances

Para salir, tecleas "q"

🤓Para ver cómo ordenar los resultados, teclea "h" y se te mostrará el listado de opciones para ordenamiento. Para salir de nuevo de esa ventana, vuelve a presionar "h" y ahora sí, presiona por ejemplo, "m" para ordenar por memoria consumida, o "c" para ordenar por recursos de CPU utilizados.

Nota: Si ves números o mensajes en color azul, debes poner atención en ello. Si lo ves en morado, las cosas se están poniendo algo feas. Si ves en color rojo, oops!!! requiere de atención urgentemente!

Evidentemente lo que esté en verde es que está súper bien.

Actualizar glances

Simplemente ejecuta el siguiente comando:

# pip install --upgrade glances

Referencias:



Cómo encontrar los archivos más grandes que ocupan más espacio en linux CentOS 7

Recientemente me encontré en la necesidad de saber cómo encontrar los archivos que estaban ocupando muchísimo espacio en un servidor con CentOS 7

Para utilizar el siguiente comando, te recomiendo primero, si así lo deseas, colocarte dentro del directorio que deseas monitorear

$ cd /directorio/a/monitorear/

Ahora sí apliquemos el siguiente comando

$ sudo find . -type f -size +5000k -exec ls -lh {} \; | awk '{ print $9 ": " $5 }'

En donde dice "+5000k" se refiere a listar los archivos con un tamaño mayor a 5MB. Ahí le puedes ir moviendo.

Referencias: https://www.cyberciti.biz/faq/find-large-files-linux/

sábado, 14 de abril de 2018

mod_security mod_evasive owasp en CentOS 7

Vamos a ver cómo asegurar el servidor de Apache utilizando los módulos de mod_security y mod_evasive.

Primero actualizamos los paquetes:

$ sudo yum update

domingo, 11 de marzo de 2018

Cómo cambiar el comentario de una entrada a otra en Wordpress

Hay veces en que tus fans de tu sitio de Wordpress publican un comentario acerca de una entrada en otra entrada 🙄 y a ti, como administrador de tu sitio, te gustaría que ese comentario apareciera más bien en la entrada que le corresponde.

Para ello deberás tener acceso a la base de datos de tu Wordpress.

Una vez que accedes a la base de datos de tu sitio en Wordpress ejecuta el siguiente comando sql

SELECT * FROM `wp_comments` ORDER BY `comment_date` DESC 

Cómo recuperar la contraseña de la base de datos de tu wordpress

Hay veces que necesitas hacer respaldo de tu base de datos de Wordpress o simplemente hacer unos cambios dentro de la misma. Ha pasado mucho tiempo y resulta que ya no te acuerdas de ella y tampoco dónde la dejaste anotada ... si es que la anotaste alguna vez.

Una posible manera de averiguar dónde quedó es que entres al servidor en donde está alojado tu sitio web de wordpress y accedas a la carpeta raíz.

Dentro de dicha carpeta está un archivo que se llama wp-config.php

abre ese archivo o simplemente imprime su contenido en la pantalla dentro de tu línea de comandos, shell o cmder con el comando cat. Es decir,

$ cat wp-config.php

La contraseña estará justo en la línea donde se muestra lo siguiente:


/** MySQL database password */

define('DB_PASSWORD', 'AquíAndaLaClave');


Saludos! 🤘🏽

martes, 6 de marzo de 2018

Laravel Homestead redirecciona aplicaciones a HTTPS

Estaba todo funcionando bien en tu desarrollo local en tu navegador cuando hacías uso del Laravel Homestead y ahora resulta que ya no puedes visualizar tu sitio de manera local, al menos en
De acuerdo a lo leído en un post en reddit, se explica que Google Chrome por defecto ya redirecciona todos los dominios .app a HTTPS.

Todavía los dominios .app se visualizan sin problemas en Firefox pero ya no en Chrome (direcciona a HTTPS)

Una solución es que debes cambiar todos los dominios a .local tanto en el archivo de hosts y en el de Homestead.yaml

lunes, 26 de febrero de 2018

CentOS 7 Wordpress error /path/to/wp-content/cache is not writable.

Este problema tiene que ver principalmente con los permisos de carpetas y el usuario que tiene derecho al acceso de dichas carpetas.

En este caso, tratándose de un CentOS 7, procedí a hacer el siguiente cambio en los permisos de usuario:

$ sudo chown -R apache:apache /la/ruta/de/tu/carpeta/wordpress

Saludos.

mysql error 1153 Got a packet bigger than 'max_allowed_packet' bytes

Me encontraba yo restaurando una base de datos de Wordpress ejecutando el siguiente comando en MySQL en un servidor conocido:

$ mysql -h 127.0.0.1 -P 3306 -u root -p blog2 < respaldo.sql

Y me salió el siguiente error:

ERROR 1153 (08S01) at line ####: Got a packet bigger than 'max_allowed_packet' bytes

Por lo que mejor intenté lo siguiente:

$ mysql --max_allowed_packet=200M -h 127.0.0.1 -P 3306 -u root -p blog2 < respaldo.sql

Y tampoco.

Entonces, yo estando en CentOS 7 con el manejador de bases de datos MariaDB, lo que hice fue buscar el archivo my.cnf el cual, en este caso, se encuentra en

$ /etc/my.cnf

Antes de proceder a modificar el archivo, recomiendo ampliamente que primero hagas una copia respaldo del archivo de configuración, por que si la riegas, al menos puedes restaurar todo:

$ sudo cp /etc/my.cnf /etc/my.cnf-ORIGINAL

Ahora sí, procedemos a editar el archivo:

$ sudo nano /etc/my.cnf

Dentro del editor, tecleo Control + W para buscar el texto max_allowed_packet pero no lo encuentro ...

La verdad nunca lo pude solucionar de esta manera, si no de otra. Es decir, primero me fijé en el archivo de respaldo.sql que me pasó el encargado, y lo había generado desde un plugin de Wordpress (cuyo nombre dejo pendiente), entonces le sugerí que mejor generara el archivo de respaldo utilizando el phpmyadmin.

Santo remedio.

lunes, 19 de febrero de 2018

Unexpected token < in JSON at position 0 php json_encode

Este error se debe a que en tu controlador tengas probablemente un "echo" que emite un texto y que no ha sido convertido a formato json, en este caso, usando la función json_encode().

Para emitir un mensaje en formato json, necesitas primero crear un arreglo asociativo, de ahí convertirlo a json.

Crear un arreglo asociativo:

$arr = array('succeeded' =>  $info_o_variable_exito,'failed'    =>  $info_o_variable_error);

Pasarlo a JSON:

echo json_encode($arr);

Es todo.

Saludos! Nada con exceso. Todo con medida.

miércoles, 14 de febrero de 2018

Limesurvey Internal Server Error Application runtime path /tmp/runtime is not valid - CentOS 7

Si al instalar tu Limesurvey 3.3.0 en un servidor CentOS 7 con servidor de Apache te sale lo siguiente:

Internal Server Error Application runtime path ".../limesurvey/tmp/runtime" is not valid. Please make sure it is a directory writable by the Web server process.

El error aquí es que, dado que estamos en CentOS 7, el usuario por defecto no es www-data, sino apache en sí por lo que debes cambiar el propietario de tu Limesurvey:

$ sudo chown -R apache:apache /directorio/de/tu/limesurvey

Y listo. En mi caso jaló con eso.

Saludos!

domingo, 28 de enero de 2018

Laravel 5 Cómo actualizar de Bootstrap 3 a Bootstrap 4

Puedes darte cuenta fácilmente de que tu proyecto recién creado de Laravel utiliza la versión 3 de bootstrap echándole un vistazo al archivo package.json.

Para actualizar a bootstrap 4, encontré en este sitio 3 sencillos comandos que sí me funcionaron en Laravel homestead con vagrant en Mac 💻.

Vamos a ello:

Colócate en la carpeta raíz de tu proyecto y ejecuta uno por uno los siguientes tres comandos:

$ composer require laravelnews/laravel-twbs4
$ php artisan preset bootstrap4-auth
$ yarn && yarn dev

Listo!

Laravel 5 /logout method not allowed

Pasó un día en que quise salir de una sesión de Laravel simplemente colocando en la URL /logout cuando me salió el siguiente error:

Symfony \ Component \ HttpKernel \ Exception \ MethodNotAllowedHttpException

No message

Si deseas que ese error no se muestre, lo que tienes que hacer es lo siguiente:

Abre el archivo de rutas /routes/web.php y justo debajo de donde dice:

Auth::routes();

coloca el siguiente pedazo de código bendito 🤠:

Route::get('/logout', '\App\Http\Controllers\Auth\LoginController@logout');

Ahora sí, ya quedó 😎🙌🏽.

Referencias: https://laracasts.com/discuss/channels/laravel/laravel-53-logout-methodnotallowed

Ciao.

laravel: command not found

Resulta que hice mi actualización del Vagrant ($vagrant box update) en windows, o en mac, y cuando quise crear un nuevo proyecto de Laravel en Homestead, me salió el siguiente error:

$ laravel: command not found

Parece que, cuando actualizas el homestead vagrant box update ¡el comando de Laravel desaparece! 😱

Entonces, de acuerdo a los docs, lo que procedí a hacer fue instalar el comando laravel tecleando lo siguiente en la consola:

$ composer global require "laravel/installer"

Y pues esperas a que haga lo que tenga que hacer.

Luego, lo que hay que hacer es editar un archivo que se llama .bashrc:

$ nano /home/vagrant/.bashrc

Al final, agrégale la siguiente línea (https://stackoverflow.com/a/35213546/1883256):

#haciendo que el laravel jale!
export PATH="$PATH:$HOME/.composer/vendor/bin"


Guardas con control + o y cierras con control + x

Ahora para que los cambios surtan efecto, debes ejecutar el siguiente comando (https://stackoverflow.com/a/16850841/1883256):

$ source ~/.bashrc

Listo. Prueba a si ya sirve el comando laravel tecleando simplemente:

$ laravel

Si sí sale algo como "laravel installer 1.5.0 .... usage ..." pues ya la hiciste!

Ahora, para crear un nuevo proyecto, primero ve a la ubicación en donde están tus demás proyectos (no te lo vaya a crear en otro directorio que no quieres), típicamente es en la carpeta Code (si no fuere el caso entonces en tu carpeta de preferencia)

$cd /Code

$ laravel new NombreDeTuProyecto

Listo!

jueves, 18 de enero de 2018

Google Charts Incompatible default series types.

Este error me ocurrió al pretender hacer una gráfica de "ComboChart" cuando estaba llamando a una gráfica "LineChart".

Además, dentro de las opciones debes tener "seriesType" y "series" para el ComboChart. Para el "LineChart" no es requerido especificar tales opciones.
var options = {
                title : 'Participación de investigadores en eventos académicos.',/* (total: '+totalparticipantes+')*/
                vAxis: {title: 'Cantidad'},
                hAxis: {title: 'SIAHs'},
                /*Agregué las siguientes dos líneas para hacerlo un combochart (sin estas dos lineas es un LineChart): con barras y línea de total*/
                seriesType: 'bars',
                series: {2: {type: 'line'}},/*series: {0: {type: 'line'},1: {type: 'line'}},*/
                /**/
                backgroundColor: { fill:'transparent'},
                tooltip: {showColorCode: true},
                tooltip: {isHtml: true},
                height: 300,
                colors: ['DeepPink','#0066ff','#1ab2ff','#802000'],/*mujeres,hombres,total*/
                'backgroundColor': 'transparent'
            };
            /*En la siguiente línea cambié de Linechart a ComboChart, si no, me sale el error Incompatible default series types.*/
            var chart = new google.visualization.ComboChart(document.getElementById('combochart'));
Saludos.
 

Tags