jueves, 5 de junio de 2025

Haz grandes cosas con HTMX

No hay comentarios.:

 # 😵‍💫 ¿Nos estamos complicando demasiado?

No sé si te ha pasado, pero últimamente siento que la programación web se ha ido de las manos.

Para hacer un simple **TODO list**, algunos tutoriales te piden:

  • React
  • Next.js
  • Tailwind
  • TypeScript
  • Zustand
  • Prisma
  • y no sé qué más...

¿De verdad necesitamos todo eso solo para agregar tareas y marcarlas como hechas?

Claro, estas herramientas tienen su lugar. Son potentes, escalables y están bien hechas. 

Pero para muchas apps del día a día, no necesitamos todo eso.

¿no será que estamos sobre-ingenierizando todo?


Cómo HTMX me devolvió la alegría de programar interfaces web

Con solo HTML, unas vistas en Django, y un poco de lógica en el backend, pude hacer cosas como:

  • Filtros combinados (por ejemplo, búsqueda + selección con `<select>`).  
  • Paginación dinámica con botones « Anterior | Siguiente ».  
  • Formularios AJAX que se envían sin recargar la página.  
  • Indicadores de carga mientras se hace la consulta.  
  • Toasts o alertas al estilo SweetAlert.


Y lo mejor: casi sin escribir JavaScript personalizado.  

La interactividad la manejo con atributos como `hx-get`, `hx-post`, `x-data`, `x-show`, etc.

Sí, Alpine.js es JavaScript, pero en una forma divertida, declarativa, y que no me hace abrir mil archivos `.js`.

Porque seamos sinceros:  

no se puede vivir sin JavaScript, pero si lo tengo que escribir, mínimo que sea divertido.


¿Qué es HTMX?

HTMX es una pequeña librería JS que te permite hacer cosas modernas usando solo HTML. Literalmente.

- En lugar de hacer `fetch()` o `axios`… usas `hx-get`.
- En lugar de `addEventListener()`… usas `hx-trigger`.
- En lugar de `innerHTML =`… usas `hx-target`.


Y lo mejor de todo: HTMX deja de forzarte a usar JSON para todo

Puedes devolver HTML directamente desde tu backend y reemplazar fragmentos en el DOM. Así de simple.

¿HTMX compite con TALL y Blazor?

Sí compite... en el terreno de la simplicidad y la experiencia del desarrollador:

HTMX, TALL (Laravel + Livewire) y Blazor Server ofrecen formas de construir interfaces reactivas sin una SPA completa.



Conclusión

HTMX es como si el HTML hubiera renacido: moderno, ágil, expresivo.

Si sentís que el stack moderno es demasiado para tareas simples, o que terminás escribiendo más configuración que funcionalidad…


dale una oportunidad al TAPH Stack (Tailwind, Alpine.js, Python/Django, HTMX).

Porque programar debería ser divertido. No un máster en Webpack y Vite para poder mostrar una tabla.


Sé que cada stack tiene su lugar, y no todo es blanco o negro. Pero si este post te hizo pensar o te devolvió la curiosidad por lo simple… misión cumplida. 


Ejemplos de HTMX con Django

  1. django-htmx
    Una extensión oficial para integrar HTMX con Django. Incluye documentación detallada y ejemplos básicos para comenzar.

  2. django-htmx-patterns
    Este repositorio presenta patrones comunes para usar HTMX con Django, incluyendo validación de formularios y modales.

  3. django-htmx-examples
    Una colección de ejemplos prácticos que replican los patrones de la documentación oficial de HTMX, adaptados a Django.

  4. django-htmx-intro
    Un proyecto introductorio que muestra cómo mejorar un formulario de Django utilizando HTMX para una experiencia más dinámica.

  5. django-htmx-fun
    Una aplicación de diario que demuestra cómo HTMX puede hacer que las aplicaciones Django sean más interactivas sin necesidad de JavaScript adicional.

  6. django-htmx-demo
    Demuestra cómo implementar varios ejemplos de la documentación de HTMX dentro de un proyecto Django.

  7. django-htmx-quickstart
    Una plantilla de inicio rápido que combina Django, HTMX, Alpine.js y TailwindCSS para prototipado ágil.

Recursos del TAPH Stack

Ver

martes, 3 de septiembre de 2024

Comparación de Frameworks de Desarrollo Web: Stack Overflow 2023 vs. 2024

No hay comentarios.:

Siempre estoy muy atento cuando la encuesta de Stack Overflow es publicada.

A pesar que Stack Overflow se ha visto desplazado por inclusión de la  IA, es una de las encuestas más fiables que tenemos.

Mi parte favorita son los web frameworks, ya que me es útil para saber qué se está usando en el mercado. Cada año, hago un pequeño análisis en comparación con el año anterior. Aquí les dejo la comparación entre los frameworks de desarrollo web más populares según las encuestas de 2023 y 2024.

Frameworks Más Populares

En ambos años, Node.js y React se mantuvieron como los frameworks más populares, aunque con una ligera disminución en su uso:

  • Node.js: pasó del 42.65% en 2023 al 40.8% en 2024.
  • React: bajó del 40.58% en 2023 al 39.5% en 2024.
Tanto jQuery, Express y Angular también se mantuvieron entre los más utilizados, aunque con pequeñas variaciones en sus porcentajes. Es interesante notar que Next.js ha visto un aumento en popularidad, subiendo del 16.67% en 2023 al 17.9% en 2024.

Aunque React no es precisamente mi librería favorita, su posición en el mercado es indiscutible. Año tras año sigue liderando las listas de popularidad, y su comunidad sigue creciendo exponencialmente. 

¡Dios salve al Rey! 👑

Tendencias a la Alta

Frameworks más recientes como FastAPI y NestJS están ganando terreno rápidamente:

  • FastAPI: creció del 7.42% en 2023 al 9.9% en 2024, pasando a Laravel en Ranking
  • NestJS: aumentó su adopción de 5.13% en 2023 a 5.8% en 2024.

Los Nuevos del Grupo

Se han añadido nuevos frameworks a la lista en 2024, les deseo mucha Suerte chicos.

Htmx (3.3%) 
Astro (3%)
Strapi (1.7%), 

Lo que sugiere un aumento de tecnologías más modernas y especializadas.

El Ecosistema JavaScript: Cada Día Nace un Framework, y Cada Día Muere Uno

El mundo de JavaScript es famoso por su constante innovación, donde cada día parece que nace un nuevo framework y, al mismo tiempo, otro desaparece en la oscuridadComo se puede ver algunas de las tecnologías que estuvieron presentes en la encuesta de 2023 ya no estan en la lista de 2024, como Lit y Qwik, ambos con menos del 1% de uso en 2023.


Como le fue a mis Framewok Favoritos:

Django: Consistencia en la Comunidad Python

Django se mantiene ha pasando de un 11.47% en 2023 a un 12% en 2024. 

Este framework es mi favorito tanto mio como  de la comunidad de Python, especialmente para aquellos que buscan una solución completa para el desarrollo de aplicaciones web robustas y seguras. 

Su enfoque en la simplicidad, junto con su ORM poderoso y un ecosistema bien soportado, continúan atrayendo a desarrolladores que buscan eficiencia sin sacrificar la funcionalidad.

Ya han lanzado la version 5.1 con pocos cambios, pero lo perfecto no se toca =)

Django REST Framework: La Potencia detrás de las APIs en Python

Aunque Django es popular por su capacidad para construir aplicaciones web, cuando se trata de crear APIs eficientes, Django REST Framework (DRF) es mi recomendación, DRF facilita la creación de APIs escalables y seguras, manteniendo la elegancia y simplicidad que caracteriza a Django.

Aunque otros frameworks más ligeros, como FastAPI, están ganando popularidad, Django REST Framework sigue siendo una opción sólida y preferida por aquellos que buscan una integración perfecta con Django para proyectos más grandes y complejos.

Laravel: Un Framework Siempre en Evolución

Laravel ha mostrado una leve subida en popularidad,  ha pasando del 7.58% en 2023 al 7.9% en 2024. Aunque este aumento es modesto, refleja la continua relevancia del framework en el desarrollo de aplicaciones web, especialmente dentro del ecosistema PHP.

Laravel es El rey de los monolitos modernos, Livewire 3 e Inertia.js permiten construir interfaces ricas desde el backend, manteniendo la lógica en el servidor, que es típico de un monolito. Esto refuerza la idea de que Laravel facilita el desarrollo rápido sin tener que dividir la aplicación en frontend y backend separados.

Si usted lo utiliza para crear APIs, sirvase disculparme por la afirmacion, pero le aconsejo hacer su api en un framework mas rapido. 😊 (Lumen, FastAPI o Express).

El anuncio de Laravel Cloud, que promete facilitar la integración con entornos en la nube de forma aún más eficiente.

Además, con el lanzamiento de Laravel 11 en el horizonte, se espera que el framework siga mejorando y, quizás, logre aumentar su popularidad en la próxima encuesta. Tendremos que estar atentos para ver si estas novedades consiguen atraer a más desarrolladores y consolidar su crecimiento.

Vue.js: Un Ligero Descenso

Vue.js ha bajando su uso del 16.38% en 2023 al 15.4% en 2024

Continua siendo uno de los frameworks más populares, especialmente para aquellos que buscan un enfoque progresivo y flexible en el desarrollo frontend sin una curva de aprensaje tan elevada. 

Podemos suponer que la baja se deebe al uso de Svelte y Next.js, aun así es un opcion solida, para muchos dev's por su facilidad y simplicidad.

Ruby on Rails: Persistencia en el Mundo

Ruby on Rails (RoR) ha pasado del 5.49% en 2023 al 4.7% en 2024, lo que refleja una caída lenta pero constante en su uso. Sin embargo, sigue siendo un framework querido por muchos desarrolladores, especialmente aquellos que prefieren trabajar solos.

Ruby on Rails ha sido el framework preferido por muchos desarrolladores que trabajan solos o en equipos pequeños, sobre todo porque ofrece una gran cantidad de herramientas listas para usar. Esto les permite a los desarrolladores crear aplicaciones completas rápidamente sin necesidad de demasiada configuración.

Su enfoque en la convención sobre la configuración y la productividad continúa atrayendo a quienes buscan desarrollar aplicaciones de manera rápida y eficiente. 

Creo que la competencia de otros frameworks modernos podría estar influyendo en esta ligera caída de popularidad.

Conclusión

Los resultados de las encuestas de Stack Overflow de 2023 y 2024 nos muestran lo rápido que pueden cambiar las preferencias de los desarrolladores, con algunas tecnologías ganando popularidad mientras otras pierden relevancia.

Ahora bien, si he dicho algo que no te ha sentado bien, ¡discúlpame! 😅 Esto es solo mi humilde opinión, basada en mi experiencia y lo que he observado. Es importante recordar que cada desarrollador tiene sus herramientas y enfoques favoritos, ¡y eso es lo que hace que este campo sea tan diverso y emocionante!

Mantente al tanto de estas tendencias para elegir las mejores herramientas para tus proyectos..

Para revisar la encuentas completa  puedes revisar en Stack Overflow Developer Survey 2024.




Tecnología 2023 (%) 2023 Ranking 2024 (%) 2024 Ranking Cambio
Node.js 42.65% 1 40.8% 1
React 40.58% 2 39.5% 2
jQuery 21.98% 3 21.4% 3
Next.js 16.67% 6 17.9% 4
Express 19.28% 4 17.8% 5
Angular 17.46% 5 17.1% 6
ASP.NET Core 16.57% 7 16.9% 7
Vue.js 16.38% 8 15.4% 8
ASP.NET 12.79% 10 12.9% 9
Flask 12.16% 11 12.9% 9
Spring Boot 11.95% 12 12.7% 11
Django 11.47% 13 12% 12
WordPress 13.38% 9 11.8% 13
FastAPI 7.42% 15 9.9% 14
Laravel 7.58% 14 7.9% 15
AngularJS 7.21% 16 6.8% 16
Svelte 6.62% 17 6.5% 17
NestJS 5.13% 19 5.8% 18
Blazor 4.88% 20 4.9% 19
Ruby on Rails 5.49% 18 4.7% 20
Nuxt.js 3.69% 21 3.6% 21
Htmx - - 3.3% 22 🆕
Symfony 3.2% 22 3.2% 23
Astro - - 3% 24 🆕
Fastify 2.05% 25 2.2% 25
Deno 2.36% 23 1.9% 26
Phoenix 2.04% 26 1.9% 27
Drupal 1.87% 27 1.9% 27
Strapi - - 1.7% 29 🆕
CodeIgniter 1.72% 28 1.7% 30
Gatsby 2.33% 24 1.6% 31
Remix 1.27% 30 1.6% 31
Solid.js 1.36% 29 1.2% 33
Yii 2 - - 0.9% 34 🆕
Play Framework 0.76% 32 0.8% 35
Elm 0.81% 31 0.6% 36
Ver

jueves, 11 de noviembre de 2021

Instalando PHP 8 y Composer 2 en Windows

No hay comentarios.:

Muchas personas utilizan Laragon o xampp para programar son excelentes productos, sin embargo si no deseas usar estas herramientas puedes hacerlo de manera nativa, dejo una guia.

Install PHP 8 en Windows 10

1.) Primero necesitamos instalar Visual C++ Redistributable aqui dejo 2 link para descarlo


2.) Ahora necesitamos php aqui dejo el link para descargarlo


Procedemos a decargar la version Non-thread-safe 64-bit version of 8.0.x.



2.1) Descomprimir en C:\php8


2.1) En la carpeta C:\php8, cambie el nombre del archivo php.ini-development a php.ini 





2.2) Edite el archivo php.ini Cambie la siguiente configuración en el archivo y guarde el archivo

2.2.1) Cambie memory_limit de 128M a 1G (¡porque Composer puede usar mucha memoria!)


2.2.2) Descomente ;extension_dir = "ext" (Solo quite el ;)


2.2.3) Tambien descomente 

extension=bz2
extension=curl
extension=fileinfo
extension=gd
extension=mbstring
extension=mysqli
extension=openssl
extension=pdo_mysql
extension=pdo_sqlite
extension=sockets
extension=sqlite3

3.) Agregando PHP8 al path de windows

3.1) Abra el  panel de control e ingrese System

3.2) Click en Advaced System Settings, en la ventana System Settings haga clic en Enviroments Variables..




3.3) Ahora Seleccione Path y precione Edith.



3.4) Clic en Nuevo y agregue C:\php8 y ok a todo.




3.5) Ahora abra power Shell y escriba php -v



Instalar  Composer

Descargue e instale composer de esta url https://getcomposer.org/download/   




Luego de instalar abra una pantalla de poweshell y pruebe con composer -V




Ver

domingo, 20 de diciembre de 2020

Cómo instalar OCI8 en Ubuntu 20.04 y PHP 7.4

3 comentarios:

Cómo instalar OCI8 en Ubuntu 20.04 y PHP 7.4 Oracle client 19




Paso 1

Descargue Oracle Instant Client y SDK del sitio web de Oracle. (Necesita iniciar sesión en la página de Oracle)

http://www.oracle.com/technetwork/topics/linuxx86-64soft-092277.html

Descargar

  • Instant Client Package - Basic - instantclient-basic-linux.x64-19.9.0.0.0dbru.zip
  • Instant Client Package - SDK - instantclient-sdk-linux.x64-19.9.0.0.0dbru.zip
  • Instant Client Package - Sql Plus (Opcional) - instantclient-sqlplus-linux.x64-19.9.0.0.0dbru.zip
  • Paso 2

    Cree una nueva carpeta para almacenar archivos zip de Oracle Instant Client en su servidor.

        sudo mkdir /usr/lib/oracle
        sudo mkdir /usr/lib/oracle/19.9
        sudo mkdir /usr/lib/oracle/19.9/client64
    

    Paso 3

    Ahora necesitamos extraer los archivos.

        sudo cp instantclient-basic-linux.x64-19.9.0.0.0dbru.zip /usr/lib/oracle/19.9/client64
        sudo cp instantclient-sdk-linux.x64-19.9.0.0.0dbru.zip /usr/lib/oracle/19.9/client64
        sudo cp instantclient-sqlplus-linux.x64-19.9.0.0.0dbru.zip /usr/lib/oracle/19.9/client64
    
        cd /usr/lib/oracle/19.9/client64
    
        sudo unzip instantclient-basic-linux.x64-19.9.0.0.0dbru.zip
        sudo unzip instantclient-sdk-linux.x64-19.9.0.0.0dbru.zip
        sudo unzip instantclient-sqlplus-linux.x64-19.9.0.0.0dbru.zip
    
        sudo mv instantclient_19_9 lib
        
    

    Paso 4

    A continuación, necesitamos crear un enlace simbólico a los archivos de Instant Client.

        cd /usr/lib/oracle/19.9/client64/lib/    
        sudo ln -s libclntsh.so.19.1 libclntsh.so (Puede que ya exista)
        sudo ln -s libocci.so.19.1 libocci.so (Puede que ya exista)
    

    Paso 5

    Agregue la carpeta a nuestro ldconfig.
        sudo su -    
        echo /usr/lib/oracle/19.9/client64/lib > /etc/ld.so.conf.d/oracle.conf
    

    Paso 6

    Actualice los enlaces de tiempo de ejecución de Dynamic Linker

        ldconfig
    

    Hecho. Ahora podemos pasar a la siguiente parte.


    Instalar paquetes adicionales


    Para instalar la extensión OCI8, necesitamos instalar algún paquete adicional en nuestro servidor.

    Paso 1

    Ejecute estos comandos:

        sudo apt-get install php-dev php-pear build-essential libaio1
    

    Paso 2

    Una vez instalado, necesitamos obtener el archivo OCI8. Pero, antes de eso, necesitamos actualizar el canal PECL.

        sudo pecl channel-update pecl.php.net
    

    Luego instalaremos oci8

        sudo pecl install oci8 (php 8)
        sudo pecl install oci8-2.2.0  (php 7.)
    
    Ver documentacion de pecl

    Cuando se le solicite la ubicación del Instant Client, ingrese lo siguiente:

        
        instantclient,/usr/lib/oracle/19.9/client64/lib
    

    Al finalizar deberia mostrar:

        Build process completed successfully
        Installing '/usr/lib/php/20190902/oci8.so'
        install ok: channel://pecl.php.net/oci8-2.2.0
        configuration option "php_ini" is not set to php.ini location
        You should add "extension=oci8.so" to php.ini    
    

    Paso 3

    Necesitamos decirle a PHP que cargue la extensión OCI8.

        sudo su -
        sudo echo "extension=oci8.so" >> /etc/php/7.4/fpm/php.ini
        echo "extension=oci8.so" >> /etc/php/7.4/cli/php.ini
    

    Paso 4

    Actualiza el servidor.

        sudo shutdown -r now
    
        sudo service php7.4-fpm restart
    

    Hasta aqui funciona el cli pero no fpm


    Configurar fpm


    Paso 1

    cd /etc/php/7.4/mods-available/
    sudo touch oci.ini
    sudo vi oci.ini
    
    agregar a oci.ini
        extension = oci8.so
    

    Paso 2

    Ahora cree un enlace simbólico como este:

        cd /etc/php/7.4/fpm/conf.d
        sudo ln -s /etc/php/7.4/mods-available/oci.ini 20-oci.ini
    

    Paso 3

    Actualiza el servidor.

        sudo shutdown -r now
    
        sudo service php7.4-fpm restart
    

    Paso 4

    Ahora crea un archivo php info

        
        cd /var/www/html/
        sudo touch info.php
        sudo vi info.php
    

    agregar a info.php

        <?php
            phpinfo();
    

    Deberia mostrar la seccion oci

        oci8
        OCI8 Support	enabled
        OCI8 DTrace Support	disabled
        OCI8 Version	2.2.0
        Oracle Run-time Client Library Version	19.9.0.0.0
        Oracle Compile-time Instant Client Version 19.9
    

    Configurar Sqlplus (opcional)


    Paso 1

    Agregando rutas al .bashrc

        cd $h
        vi .bashrc
    

    Agregar

    export ORACLE_HOME=/usr/lib/oracle/19.9/client64
    export TNS_ADMIN=/usr/lib/oracle/19.9/client64/network/admin
    export PATH=$PATH:$ORACLE_HOME/lib
    export LD_LIBRARY_PATH=$ORACLE_HOME/lib
    export EDITOR=vi
    

    Paso 2

    Crear el archivo tnsnames.ora

        cd /usr/lib/oracle/19.9/client64
        sudo mkdir /usr/lib/oracle/19.9/client64/network
        sudo mkdir /usr/lib/oracle/19.9/client64/network/admin
        cd /usr/lib/oracle/19.9/client64/network/admin
        sudo touch tnsnames.ora
        sudo vi tnsnames.ora
    

    Agregar

    orcl =
      (DESCRIPTION =
        (ADDRESS_LIST =
          (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.1)(PORT = 1521))
         )
        (CONNECT_DATA =
          (SERVICE_NAME = orcl)
        )
      )
    

    Por ultimo vamos a probar

        sqlplus system/system@orcl
    
    Ver

    sábado, 25 de julio de 2020

    Laravel & vue reload / refresh data con timer

    No hay comentarios.:
    No se si es la solucion correcta, pero asi lo solucione yo. Paso 1 - Nuevo proyecto / Ejecutar proyect
    laravel new test_tick
    cd test_tick
    php artisan serve
    

    Paso 2: Instalar Vue (en otra ventana)
    cd test_tick
    composer require laravel/ui
    php artisan ui vue
    

    Paso 3 : Instalar moment
    npm install
    npm run watch
    

    Paso 4 : Desarollando el tick
    Abrimos el archivo resources/js/components/ExampleComponent.vue
    Vamos hacer el metodo llenar se ejecute cada 5 segundos.
    <template>
        <div class="container">
            <div class="row justify-content-center">
                <div class="col-md-8">
                    <div class="card">
                        <div class="card-header">Example Component</div>
     
                        <div class="card-body">
                            Fecha: {{fecha}}
                        </div>
                    </div>
                </div>
            </div>
        </div>
    </template>
     
    <script>
        export default {
            data(){
                return {
                    fecha: new Date(),
                }
            },
            mounted() {
                console.log('Component mounted.')
                this.llenar();
            },//timer
            beforeDestroy () {
                clearInterval(this.intervalid1)
            },
            created() {
                setInterval(this.llenar, 30000);
            },//fin timer
             methods:{
                llenar(){
                    this.fecha= new Date();
                    console.log (this.fecha);
                },
            }
        }
    </script>
     

    Paso 5 : Habilitando VUE en Laravel Para este ejemplo vamos a reemplazar la vista resources/views/welcome.blade.php con el siguiente contenido.
    <!DOCTYPE html>
    <html lang="{{ str_replace('_', '-', app()->getLocale()) }}">
        <head>
            <meta charset="utf-8">
            <meta name="viewport" content="width=device-width, initial-scale=1">
     
            <title>Laravel</title>
            <!-- Scripts -->
            <script src="{{ asset('js/app.js') }}" defer></script>
     
        </head>
        <body>
            <div id="app">
                <example-component></example-component>
            </div>
        </body>
    </html>

    Ver

    miércoles, 22 de julio de 2020

    Instalar moment en Laravel & vue

    No hay comentarios.:

    Instalando Moment


    Paso 1 - Nuevo proyecto / Ejecutar proyect
    laravel new test_fechas
    cd test_fechas
    php artisan serve
    

    Paso 2: Instalar Vue (en otra ventana)
    cd test_fechas
    composer require laravel/ui
    php artisan ui vue
    
    Paso 3 : Instalar moment
    npm install
    npm install --save vue-moment
    npm run watch
    

    Paso 3: Configurando moment
    En archivo resources/js/app.js arriba de la seccion app agregamos.
    /* moment */
    import moment from 'moment'
    import 'moment/locale/es';
    Vue.prototype.moment = moment
    Vue.use(require('vue-moment'));
    
    const app = new Vue({
        el: '#app',
    });
    

    Paso 4: Testing Moment
    Abrimos el archivo resources/js/components/ExampleComponent.vue
    <template>
        <div class="container">
            <div class="row justify-content-center">
                <div class="col-md-8">
                    <div class="card">
                        <div class="card-header">Example Component</div>
    
                        <div class="card-body">
                            {{moment(fecha).format('dddd, Do MMMM YYYY, h:mm:ss a')}}
                        </div>
                    </div>
                </div>
            </div>
        </div>
    </template>
    
    <script>
        export default {
            mounted() {
                console.log('Component mounted.')
            },
            data(){
                return {
                    fecha: new Date()
                }
            },
        }
    </script>
    

    Paso 5: Desplegando el Componente Para este ejemplo vamos a reemplazar la vista resources/views/welcome.blade.php con el siguiente contenido.
    <!DOCTYPE html>
    <html lang="{{ str_replace('_', '-', app()->getLocale()) }}">
        <head>
            <meta charset="utf-8">
            <meta name="viewport" content="width=device-width, initial-scale=1">
    
            <title>Laravel</title>
            <!-- Scripts -->
            <script src="{{ asset('js/app.js') }}" defer></script>
    
        </head>
        <body>
            <div id="app">
                <example-component></example-component>
            </div>
        </body>
    </html>
    
    

    Resultado final


     

    Ver

    martes, 10 de marzo de 2020

    Cómo instalar OCI8 en Ubuntu 18.04 y PHP 7.2

    No hay comentarios.:

    Fuente: https://gist.github.com/Yukibashiri/cebaeaccbe531665a5704b1b34a3498e



    Instale Oracle Instant Client y SDK


    Paso 1

    Descargue Oracle Instant Client y SDK del sitio web de Oracle. (Necesita iniciar sesión en la página de Oracle)

    http://www.oracle.com/technetwork/topics/linuxx86-64soft-092277.html

    Descargar

  • Instant Client Package - Basic
  • Instant Client Package - SDK
  • Instant Client Package - Sql Plus (Opcional)
  • Paso 2

    Cree una nueva carpeta para almacenar archivos zip de Oracle Instant Client en su servidor.

        sudo mkdir /usr/lib/oracle
        sudo mkdir /usr/lib/oracle/12.2
        sudo mkdir /usr/lib/oracle/12.2/client64
    

    Paso 3

    Ahora necesitamos extraer los archivos.

        sudo cp instantclient-basic-linux.x64-12.2.0.1.0.zip /usr/lib/oracle/12.2/client64
        sudo cp instantclient-sdk-linux.x64-12.2.0.1.0.zip /usr/lib/oracle/12.2/client64
        sudo cp instantclient-sqlplus-linux.x64-12.2.0.1.0.zip /usr/lib/oracle/12.2/client64
    
        cd /usr/lib/oracle/12.2/client64
    
        sudo unzip instantclient-basic-linux.x64-12.2.0.1.0.zip
        sudo unzip instantclient-sdk-linux.x64-12.2.0.1.0.zip
        sudo unzip instantclient-sqlplus-linux.x64-12.2.0.1.0.zip
    
        sudo mv instantclient_12_2 lib
        
    

    Paso 4

    A continuación, necesitamos crear un enlace simbólico a los archivos de Instant Client.

        cd /usr/lib/oracle/12.2/client64/lib/
        sudo ln -s libclntsh.so.12.1 libclntsh.so
        sudo ln -s libocci.so.12.1 libocci.so
    

    Otra opcion para este mismo paso

        ln -s /usr/lib/oracle/12.2/client64/lib/libclntsh.so.12.1 /usr/lib/oracle/12.2/client64/lib/libclntsh.so
        ln -s /usr/lib/oracle/12.2/client64/lib/libocci.so.12.1 /usr/lib/oracle/12.2/client64/lib/libocci.so
    

    Paso 5

    Agregue la carpeta a nuestro ldconfig.
        sudo su -
        echo /usr/lib/oracle/12.2/client64/lib > /etc/ld.so.conf.d/oracle.conf
    

    Paso 6

    Actualice los enlaces de tiempo de ejecución de Dynamic Linker

        ldconfig
    

    Hecho. Ahora podemos pasar a la siguiente parte.


    Instalar paquetes adicionales


    Para instalar la extensión OCI8, necesitamos instalar algún paquete adicional en nuestro servidor.

    Paso 1

    Ejecute estos comandos:

        sudo apt-get install php-dev php-pear build-essential libaio1
    

    Paso 2

    Una vez instalado, necesitamos obtener el archivo OCI8. Pero, antes de eso, necesitamos actualizar el canal PECL.

        sudo pecl channel-update pecl.php.net
    

    Luego instalaremos oci8

        sudo pecl install oci8
    

    Cuando se le solicite la ubicación del Instant Client, ingrese lo siguiente:

        instantclient,/usr/lib/oracle/12.2/client64/lib
    

    Al finalizar deberia mostrar:

        Build process completed successfully
        Installing '/usr/lib/php/20170718/oci8.so'
        install ok: channel://pecl.php.net/oci8-2.2.0
        configuration option "php_ini" is not set to php.ini location
        You should add "extension=oci8.so" to php.ini
    

    Paso 3

    Necesitamos decirle a PHP que cargue la extensión OCI8.

        sudo su -
        sudo echo "extension=oci8.so" >> /etc/php/7.2/fpm/php.ini
        echo "extension=oci8.so" >> /etc/php/7.2/cli/php.ini
    

    Paso 4

    Actualiza el servidor.

        sudo shutdown -r now
    
        sudo service php7.2-fpm restart
    

    Hasta aqui funciona el cli pero no fpm


    Configurar fpm


    Paso 1

    cd /etc/php/7.2/mods-available/
    sudo touch oci.ini
    sudo vi oci.ini
    
    agregaar a oci.ini
        extension = oci8.so
    

    Paso 2

    Ahora cree un enlace simbólico como este:

        cd /etc/php/7.2/fpm/conf.d
        sudo ln -s /etc/php/7.2/mods-available/oci.ini 20-oci.ini
    

    Paso 3

    Actualiza el servidor.

        sudo shutdown -r now
    
        sudo service php7.2-fpm restart
    

    Paso 4

    Ahora crea un archivo php info

        
        cd /var/www/html/
        sudo touch info.php
        sudo vi info.php
    

    agregar a info.php

        <?php
            phpinfo();
    

    Deberia mostrar la seccion oci

        oci8
        OCI8 Support enabled
        OCI8 DTrace Support disabled
        OCI8 Version 2.2.0
        Oracle Run-time Client Library Version 12.2.0.1.0
        Oracle Compile-time Instant Client Version 12.2
    

    Configurar Sqlplus (opcional)


    Paso 1

    Agregando rutas al .bashrc

        cd $h
        vi .bashrc
    

    Agregar

    export ORACLE_HOME=/usr/lib/oracle/12.1/client64
    export TNS_ADMIN=/usr/lib/oracle/12.1/client64/network/admin
    export PATH=$PATH:$ORACLE_HOME/lib
    export LD_LIBRARY_PATH=$ORACLE_HOME/lib
    export EDITOR=vi
    

    Paso 2

    Crear el archivo tnsnames.ora

        cd /usr/lib/oracle/12.2/client64
        sudo mkdir /usr/lib/oracle/12.2/client64/network
        sudo mkdir /usr/lib/oracle/12.2/client64/network/admin
        cd /usr/lib/oracle/12.2/client64/network/admin
        sudo touch tnsnames.ora
        sudo vi tnsnames.ora
    

    Agregar

    orcl =
      (DESCRIPTION =
        (ADDRESS_LIST =
          (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.1)(PORT = 1521))
         )
        (CONNECT_DATA =
          (SERVICE_NAME = orcl)
        )
      )
    

    Por ultimo vamos a probar

        sqlplus system/system@orcl
    
    Ver