% -*- mode: latex; -*- mustache tags:  
\ifx\wholebook\relax\else

	\documentclass[10pt,twoside,english]{root/support/latex/sbabook/sbabook}
  \usepackage{import}
  \subimport{root/support/latex/}{common.tex}

  \hypersetup{pdfinfo = {
    Title = {Déploiement de TinyBlog},
    Author = {},
    Keywords = {pharo, smalltalk}}}
  \begin{document}
\fi

\chapter{Correction semaine pr\'{e}c\'{e}dente}
Vous pouvez charger l'application compl\`{e}te TinyBlog en ex\'{e}cutant :

\begin{displaycode}{smalltalk}
Gofer new 
   smalltalkhubUser: 'PharoMooc' project: 'TinyBlog';
   package: 'ConfigurationOfTinyBlog';
   load. 
#ConfigurationOfTinyBlog asClass loadFinalApp
\end{displaycode}

Pour tester le code, vous devez lancer le serveur HTTP pour Seaside  avec l'outil Seaside Control Panel. Compl\'{e}tez ou terminez \textbf{votre} application et commitez votre code dans votre d\'{e}p\^{o}t sur Smalltalkhub. 
\chapter{D\'{e}ployer dans le cloud}
Maintenant que vous avez d\'{e}velopp\'{e} votre application web TinyBlog, nous allons voir comment la d\'{e}ployer sur un serveur dans le cloud.
Si vous souhaitez d\'{e}ployer votre application sur un serveur que vous administrez, nous conseillons la lecture du dernier chapitre du livre \symbol{34}Enterprise Pharo: a Web Perspective\symbol{34} (\url{http://books.pharo.org}).
Dans la suite, nous d\'{e}taillons une solution plus simple fournie par PharoCloud.
\section{H\'{e}bergement sur PharoCloud}
PharoCloud est un h\'{e}bergeur d\'{e}di\'{e} aux applications Pharo et qui offre la possibilit\'{e} de tester gratuitement ses services (ephemeric cloud subscription).

Pr\'{e}parer son compte PharoCloud :

\begin{itemize}
\item cr\'{e}er un compte sur \url{http://pharocloud.com}
\item activer son compte
\item se connecter
\item activer \symbol{34}Ephemeric Cloud\symbol{34} afin d'obtenir un identifiant (\textbf{API User ID}) et un mot de passe (\textbf{API Auth Token})
\item clicker sur \symbol{34}Open Cloud Client\symbol{34} et identifiez-vous avec les identifiants ci-dessus
\item une fois connect\'{e}, vous devez obtenir une page web permettant d'uploader un fichier archive (zip) contenant un fichier image Pharo et son fichier changes
\end{itemize}
\section{Pr\'{e}paration de l'image Pharo pour PharoCloud}
Actuellement, PharoCloud ne supporte que les images Pharo 4. 

T\'{e}l\'{e}charger une image PharoWeb 4 
\url{https://ci.inria.fr/pharo-contribution/job/PharoWeb/PHARO=40,VERSION=stable,VM=vm/lastSuccessfulBuild/artifact/PharoWeb.zip}. 
T\'{e}l\'{e}charger \'{e}galement la VM pour les images Pharo 4 \url{http://www.pharo.org/download}.
Lancer cette image avec la VM et nous allons maintenant la configurer.

Commen\c{c}ons par configurer Seaside en enlevant les applications de d\'{e}monstration et les outils de d\'{e}veloppement:

\begin{displaycode}{smalltalk}
	"Seaside Deployment configuration"
	WAAdmin clearAll.
	WAAdmin applicationDefaults removeParent: WADevelopmentConfiguration instance.
	WAFileHandler default: WAFileHandler new.
	WAFileHandler default 
		preferenceAt: #fileHandlerListingClass
		put: WAHtmlFileHandlerListing.
	WAAdmin defaultDispatcher 
		register: WAFileHandler default
		at: 'files'.
\end{displaycode}

Chargeons maintenant l'application TinyBlog. 
Pour charger l'application corrig\'{e}e vous pouvez utiliser :

\begin{displaycode}{smalltalk}
	"Load TinyBlog"
	Gofer new 
	   smalltalkhubUser: 'PharoMooc' project: 'TinyBlog';
	   package: 'ConfigurationOfTinyBlog';
	   load. 
	#ConfigurationOfTinyBlog asClass loadFinalApp.

	"Create Demo posts if needed"
	#TBBlog asClass createDemoPosts.
\end{displaycode}

Mais vous pouvez aussi charger \textbf{votre} application TinyBlog depuis votre d\'{e}p\^{o}t sur Smalltalkhub. Par exemple :

\begin{displaycode}{smalltalk}
	"Load TinyBlog"
	Gofer new 
	   smalltalkhubUser: 'XXXX' project: 'TinyBlog';
	   package: 'TinyBlog';
	   load. 

	"Create Demo posts if needed"
	#TBBlog asClass createDemoPosts.
\end{displaycode}

Indiquons maintenant \`{a} Seaside que l'application par d\'{e}faut est TinyBlog et lan\c{c}ons le serveur HTTP.

\begin{displaycode}{smalltalk}
	"Tell Seaside to use TinyBlog as default app"
	WADispatcher default defaultName: 'TinyBlog'.

	"Start HTTP server"
	ZnZincServerAdaptor startOn: 8080.
\end{displaycode}

Sauvegarder maintenant votre image Pharo (Menu World \textgreater{} save).

Puis, tester en local dans votre navigateur via l'URL \url{http://localhost:8080}.
\section{D\'{e}ploiement sur Ephemeric Cloud de PharoCloud }
Cr\'{e}er une archive (fichier zip) contenant les deux fichiers : \textcode{PharoWeb.image} et \textcode{PharoWeb.changes}.

Glisser/d\'{e}poser ce fichier zip sur le Ephemeric Cloud de Pharo cloud et activer cette image (bouton play) comme indiqu\'{e} sur la figure \ref{activeEphemerics}.


\begin{figure}

\begin{center}
\includegraphics[width=0.85\textwidth]{figures/ActiveEphemerics.png}\caption{Administration des images Pharo sur Ephemeric Cloud.\label{activeEphemerics}}\end{center}
\end{figure}


En cliquant sur l'URL publique fournie vous voir s'afficher votre application TinyBlog comme sur la figure \ref{tinyBlogOnPharoCloud}.


\begin{figure}

\begin{center}
\includegraphics[width=0.85\textwidth]{figures/TinyBlogOnPharoCloud.png}\caption{Votre application TinyBlog sur PharoCloud.\label{tinyBlogOnPharoCloud}}\end{center}
\end{figure}



\ifx\wholebook\relax\else
\end{document}
\fi