La programmazione funzionale riscuote molto successo soprattutto in ambito matematico e finanziario ma anche nel contesto di sistemi complessi come le telco o la programmazione parallela. Il framework .NET da tempo ha incluso F#, un puro linguaggio funzionale, nel novero dei linguaggi che è possibile utilizzare all’interno del framework e il linguaggio si è diffuso molto velocemente pur rimandendo un linguaggio di nicchia che però opera in contesti di grande importanza e dove siano necessari grande velocità, stabilità e precisione.
Il progetto opensource SAFE punta a portare la programmazione funzionale ed i suoi vantaggi anche nello sviluppo di SPA (Single Page Application) sul Web attraverso un framework integrato e di semplice utilizzo. SAFE, come tanti altri progetti basati sul framework .NET, può essere usato sui nostri servizi di hosting ed in particolare godere della scalabilità del servizio di Cloud Hosting.
Per sapere di più su SAFE è sufficiente visitare il sito Web del progetto:
Questo articolo spiega come pubblicare un progetto basato su SAFE.
Generare il template di applicazione
Per iniziare ad usare SAFE è necessario avere installato .NET Core SDK v3 o successive ed alcuni tool di supporto. La procedura di installazione di questi tool è descritta nel Quick Start disponibile all’URL
https://safe-stack.github.io/docs/quickstart/
Da qui in poi si suppone che sia SDK per .NET Core v3+ e i tool siano stati installati. Inoltre, è necessario avere a disposizione un editor. In questo articolo si descrive la procedura per chi usa Visual Studio 2019.
Crea una cartella nella quale verrà creata l’applicazione, ad es. C:\Safe, ed entra nella cartella.
Installa il template di SAFE:
dotnet new -i SAFE.Template
e poi crea il template dell’applicazione nella cartella che abbiamo scelto:
dotnet new SAFE
A questo punto, se si vuole, è possibile provare ad eseguire l’applicazione per confermarne il corretto funzionamento. Sarà sufficiente eseguire:
fake build --target run
e dopo qualche secondo il browser dovrebbe aprirsi sull’indirizzo di default dell’applicazione e visualizzare l’applicazione di test.
Sei pronto per la pubblicazione !
Pubblicazione sul Cloud Hosting
Per la pubblicazione di una applicazione demo è sufficiente attivare anche un account VSW Cloud Hosting Free che consente di provare il servizio in modo completamente gratuito. Maggiori informazioni all’URL:
https://www.vaisulweb.com/it/services/vsw-cloud-hosting-free/
Una volta attivato il servizio è possibile procedere alla configurazione dell’applicazione ed alla sua pubblicazione online.
Inviare nella cartella C:\Safe il seguente comando per la compilazione prima della pubblicazione
fake build --target bundle
A questo punto saremmo quasi pronti per la pubblicazione e nell’immagine si vede che la nostra applicazione compilata risiede nella cartella
C:\Safe\deploy\server
ma noi vogliamo fare di più!
Bonus: tiered-compilation e Ready2Run image
Prima di pubblicare la nostra prima applicazione SPA in F# vogliamo sfruttare la compatibilità delle macchine di VaiSulWeb per attivare due funzionalità speciali che sono parte di .NET Core v3+.
La prima è chiamata tiered-compilation (TC) e consente di abilitare una modalità di compilazione a livelli che aiuta le applicazioni ad avviarsi più velocemente compilando in maniera più veloce ma meno ottimizzata il codice in caso di avvio dell’applicazione per passare poi ad una compilazione più ottimizzata in un momento successivo ed ottenere prestazioni migliori durante la normale esecuzione.
Oltre a questo attiveremo l’output di una immagine Ready2Run. Anche questa è una nuova funzionalità che consente di generare del codice quasi simile a quello che viene prodotto durante la compilazione JIT in fase di avvio dell’applicazione, in sostanza la compilazione in codice nativo da IL. Se conosciamo già prima l’ambiente (sistema operativo e bitness) sul quale eseguiremo l’applicazione possiamo chiedere al compilatore di emettere un codice già compilato in modalità nativa e risparmiare il tempo della compilazione JIT, avviando l’applicazione più velocemente.
Il servizio di Cloud Hosting di VaiSulWeb è basato su Windows e supporta l’esecuzione a 64 bit per cui compileremo una immagine R2R win-x64.
Modifichiamo quindi il file Server.fsproj in
C:\Safe\src\Server
aggiungendo le righe evidenziate nell’immagine e cioè:
<TieredCompilation>true</TieredCompilation> <PublishReadyToRun>true</PublishReadyToRun> <RuntimeIdentifiers>win-x64</RuntimeIdentifiers>
La prima impostazione abilita la tiered-compilation mentre le altre due abilitano R2R e indicano al compilatore per quale piattaforma vogliamo compilare nativamente. Ricorda che non puoi eseguire l’applicazione su una piattaforma diversa da quella che hai indicato. Noi compileremo per Windows a 64bit e a questo proposito ricorda che devi abilitare l’esecuzione a 64bit attraverso il Pannello di Controllo del servizio di Cloud Hosting.
Attenzione: non inserire queste impostazioni nel progetto durante la prima fase di build con FAKE o verrà generato un errore. Modifica il file .fsproj solo dopo la prima compilazione con FAKE.
A questo punto siamo pronti per chiedere al framework .NET Core di compilare la nostra applicazione.
Bonus: pubblicazione indipendente dal framework
Con .NET Core il ciclo di rilascio del framework .NET Core è diventato più complicato. Nello stesso momento ci possono essere più versioni di .NET Core disponibili, alcune supportate per un tempo inferiore (ad es. 12 mesi) altre per un tempo maggiore (le versioni LTS, 3 anni). A questo si può aggiungere l’esistenza anche di versioni “preview” anche con autorizzazione ad andare in produzione.
A livello server è possibile fare il deployment di più versioni del framework ma la realtà è che ogni sviluppatore avrà esigenze diverse e probabilmente finirà per avere bisogno di una versione del framework che magari non è installata. Per non generare confusione e lasciare la massima libertà ai nostri clienti, i server di Cloud Hosting non sono configurati con nessun runtime per .NET Core e deve quindi essere abilitata la pubblicazione indipendente dal framework.
Questo tipo di configurazione genera applicazioni più grandi perchè l’intero set di librerie .NET Core deve essere pubblicato con l’applicazione ma lascia per contro la massima libertà all’utente che può usare qualunque versione decida, anche quelle non più o non ancora supportate ovviamente a suo rischio e pericolo. Spesso non è facile riuscire a seguire l’evoluzione del framework se si deve procedere alla ricompilazione troppo spesso, con la necessità anche di gestire gli errori dovuti a modifiche del funzionamento introdotte dalle nuove versioni.
Nel nostro esempio pubblicheremo in modo indipendente dal framework.
Compilazione finale
Per generare tutti file necessari alla pubblicazione possiamo eseguire il seguente comando, sempre posizionandoci nella cartella C:\Safe
dotnet publish --self-contained -r win-x64
Ci vorrà un po’ di tempo per completare la compilazione ma alla fine dovresti avere un messaggio come quello di seguito:
La versione dell’applicazione generata dal compilatore si troverà in
C:\Safe\src\Server\bin\Debug\netcoreapp3.0\win-x64\publish\
Nel nostro caso la cartella “publish” conterrà circa 95MB di file. Sono tanti! Ricorda però che stai pubblicando l’intero framework che stai usando e che questo ti consente di non preoccuparti delle versioni di .NET Core che possano essere installate sul server.
Pubblicazione sul server
La nostra applicazione richiede la pubblicazione di due distinti contenuti: la parte server dell’applicazione, contenuta appunto nella cartella
C:\Safe\src\Server\bin\Debug\netcoreapp3.0\win-x64\publish\
e la parte client che è invece contenuta in
C:\Dev\Safe\deploy\Client\public
La cartella public contiene tutti i file accessibili dal Web da parte degli utenti e quindi include font, fogli di stile (CSS), immagini etc. Per impostazione predefinita la cartella “Client\public” si trova allo stesso livello della Server che quindi si aspetta di trovarla ad un livello superiore rispetto al codice che sta eseguendo (in termini di percorso è “..\Client“). Questa impostazione può ovviamente essere modificata ma lasceremo tutto nella sua configurazione standard. Si tratta solo di capire dove pubblicare le diverse cartelle.
La parte server verrà pubblicata nel percorso predefinito del Cloud Hosting e quindi in:
C:\home\site\wwwroot
in questa cartella verrà inserito il contenuto di
C:\Safe\src\Server\bin\Debug\netcoreapp3.0\win-x64\publish\
Oltre a questo, dobbiamo anche creare un file web.config che consentirà a .NET Core ed al Cloud Hosting di comunicare. Basterà inserire questo contenuto:
<?xml version="1.0" encoding="utf-8"?> <configuration> <location path="." inheritInChildApplications="false"> <system.webServer> <handlers> <add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModule" resourceType="Unspecified" /> </handlers> <aspNetCore processPath=".\Server.exe" stdoutLogEnabled="false" stdoutLogFile=".\stdout.txt" /> </system.webServer> </location> </configuration> <!--ProjectGuid: 73E8E820-C8AA-47CC-BB2B-152CA4D0B856-->
Questo file indica al server di eseguire il processo “Server.exe” e configurarlo per l’esecuzione assegnandogli la porta che il Cldou Hosting ha riservato per l’applicazione. Opzionalmente è possibile anche abilitare la generazione di un file “stdout.txt” che conterrà tutto l’output generato dal processo in esecuzione, una opzione utile per registrare il contenuto della console e rilevare eventuali errori o altri messaggi di stato. Questa opzione è però disabilitata (stdoutLogEnabled=”false”).
La cartella Client con la sua sottocartella public devono essere invece pubblicate in
C:\home\site
per ottenere quindi un percorso finale sul server come
C:\home\site\Client\public
con i file che abbiamo prelevato dall’omonima cartella sulla nostra macchina.
Siamo pronti per eseguire la nostra applicazione F# con SAFE !
Risultato: il programma di test online
Richiamando ora l’indirizzo assegnato dal Pannello di Controllo, dovresti visualizzare il demo dell’applicazione in F#:
Congratulazioni! La tua prima applicazione in F# è ora online ed il limite è solo la tua fantasia.
Nel nostro caso, un demo dell’applicazione è pubblicata all’URL:
http://safedemo.eu-w.cloudapps.enterprisehost.biz/
Nota come siano molto veloci nella risposta i due pulsanti nonostante il codice per la loro gestione venga eseguito sul server.
Per maggiori informazioni non esitare a contattare il nostro servizio di assistenza.
2
Leave a Comment