Skip to content

Commit

Permalink
Merge pull request #3 from luxifer/go-docker-deploy
Browse files Browse the repository at this point in the history
Go docker deploy
  • Loading branch information
luxifer committed Apr 5, 2016
2 parents e428167 + aff8f58 commit 9d6a961
Show file tree
Hide file tree
Showing 14 changed files with 213 additions and 79 deletions.
2 changes: 1 addition & 1 deletion Gemfile
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
source 'https://rubygems.org'
gem 'github-pages', '~> 39'
gem 'github-pages'
8 changes: 6 additions & 2 deletions _config.yml
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,11 @@

permalink: pretty
exclude: ['Gemfile', 'Gemfile.lock']
markdown: redcarpet
highlighter: pygments
markdown: kramdown
highlighter: rouge

kramdown:
input: GFM

# configuration required for some pages

Expand Down Expand Up @@ -42,6 +45,7 @@ gems:
- jekyll-sitemap
- jekyll-mentions
- jekyll-feed
- jekyll-paginate

feed:
path: atom.xml
4 changes: 2 additions & 2 deletions _posts/2011-12-27-url-shortener.md
Original file line number Diff line number Diff line change
Expand Up @@ -34,14 +34,14 @@ Voulant me remettre petit à petit dans le framework django de python, je me sui
Le code source du projet est sous licence GPL V3 et est disponible sur github : [https://github.com/LuXiFeR/UrliZr](https://github.com/LuXiFeR/UrliZr)

J'ai commencé par simplement faire un générateur d'identifiant unique en python :
{% highlight python %}
```python
import string
from random import choice

def genUid():
chars = string.letters + string.digits
return u''.join(choice(chars) for i in range(8))
{% endhighlight %}
```
Cette fonction me permet de générer un ID unique pour chaque URL de 8 caractères de long, ce qui me permet de stocker un paquet d'adresses en base de données.

J'ai ensuite fait une petite interface web un peu stylisée pour pouvoir générer les URL raccourcis.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ Ce matin je faisais un peu de R&D au bureau pour savoir comment récupérer

Bref, après plusieurs essais et modifications de mon côté, j'ai transformé cette classe en full objet, documentée et ajouter quelques conditions de gestion d'erreurs.

{% highlight php %}
```php
<?php

/**
Expand Down Expand Up @@ -284,11 +284,11 @@ class MailAttachmentManager
return $header->from[0]->mailbox.'@'.$header->from[0]->host;
}
}
{% endhighlight %}
```

Pour ce qui est de l'utilisation, voici une petite démo rapide d'utilisation pour parcourir sa boite mail et sauvegarder les messages dans un dossier défini :

{% highlight php %}
```php
#!/usr/bin/env php
<?php
require_once("attachmentread.class.php");
Expand All @@ -297,7 +297,7 @@ $login=""; //imap login
$password=""; //imap password
$savedirpath="./" ; // attachement will save in same directory where scripts run othrwise give abs path
$jk=new MailAttachmentManager($host, $login, $password, $savedirpath); // Creating instance of class####
{% endhighlight %}
```

N'hésitez pas a commenter ou faire des suggestions par rapport au code. Prochaine étape trouver un moyen de sécuriser la boite mail qui va recevoir les pièces jointes pour les attacher à un utilisateur d'un site. Un peu comme Flickr qui permet d'ajouter des photos à son stream par mail.

Expand Down
24 changes: 12 additions & 12 deletions _posts/2012-01-10-integrer-akismet-dans-symfony-1-4.md
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ Une fois votre compte créé, vous recevez un mail avec votre clé API et vos in

On va d'abord commencer par la configuration, donc ouvrez le fichier `akismet.yml.example` dans le sous-répertoire `config/` du plugin et enregistrez le en `akismet.yml`.

{% highlight yaml %}
```yaml
akismet:
user_agent:
application:
Expand All @@ -46,21 +46,21 @@ akismet:
localhost: #host utilisé pour le dev
host: www.example.com
key: ############
{% endhighlight %}
```
Maintenant le plugin configuré, il faut activé le plugin dans le fichier `config/projectConfiguration.class.php`.

{% highlight php %}
```php
<?php
$this->enablePlugins('drAkismetPlugin');
{% endhighlight %}
```

Maintenant que le plugin est activé et disponible, il faut se poser la question de comment on va l'intégrer à notre application. Pour ça il y a plusieurs possibilité, la plus simple c'est d'utiliser le `sfValidator` fourni avec le plugin. Il y a d'autres possibilité, mais je vais décrire l'intégration avec le validateur. Nous verrons les autres pour signaler à Akismet un Spam ou un Ham dans l'administration.

Donc pour utiliser le validateur, rien de plus simple, il s'utilise comme un validateur symfony classique. Ouvrez le `form` de votre projet et allez dans la méthode `configure()`.

{% highlight php %}
```php
<?php
$this->validatorSchema['text'] = new sfValidatorAnd(array( //text est le contenu du commentaire, adaptez à votre modèle
Expand All @@ -74,33 +74,33 @@ $this->validatorSchema['text'] = new sfValidatorAnd(array( //text est le contenu
'comment_content' => $this->getValue('text')
))
));
{% endhighlight %}
```

Et voilà, maintenant dès que vous posterez un commentaire, si Akismet le déclare comme spam, le formulaire ne sera pas valide et le commentaire ne sera pas sauvegardé.

Maintenant on peut se dire qu'on a besoin de faire un peu plus que ne pas sauvegarder le commentaire. C'est possible, on peut écouter la requête avant qu'elle soit envoyée à Akismet et récupérer la réponse avant qu'elle ne soit traitée par le validateur. Pour ça j'ai du faire une petite modification du plugin pour qu'il récupère le dispatcher d'événement de l'application au lieux d'en créer un nouveau. Ouvrez le fichier `lib/api/connection/drAkismetApiSocketConnection.class.php` et remplacez le contenu du constructeur pa ça :

{% highlight php %}
```php
<?php
$this->_dispatcher = sfContext::getInstance()->getEventDispatcher();
{% endhighlight %}
```

Donc maintenant le dispatcher est connecté à symfony, il faut ensuite récupérer l'événement pour indiquer quelle méthode va l'écouter :

{% highlight php %}
```php
<?php
$this->dispatcher->connect('akismet.pre_request', array('listenToPreRequest'));
$this->dispatcher->connect('akismet.raw_response', array('listenToRawResponse'));
{% endhighlight %}
```

Maintenant qu'on écoute les événements et qu'on a défini les méthodes qui vont les traiter voici quelques méthodes utiles pour `parser` la réponser qu renvoit le serveur.

{% highlight php %}
```php
<?php
public static function listenToRawResponse(sfEvent $event)
{
$rawResponse = new drAkismetApiResponse($event['response']);
}
{% endhighlight %}
```

Voilà voilà, à votre tour d'intégrer Akismet à votre projet Symfony. Si vous avez des retours, n'hésitez pas à utiliser les commentaires.
8 changes: 4 additions & 4 deletions _posts/2012-01-17-upload-depuis-le-navigateur-sur-ios.md
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ Je ne sais pas si vous le savez, mais sur iPhone, iPod et iPad il est impossible

Enfin arrêtons de "troller" mais j'ai trouvé une solution pour pouvoir contourner le bridage de Apple. Il s'agit de [Picup](http://picupapp.com/index.html). Cette application va transformer les champs `<input type="file">` en lien `fileupload://` qui va ensuite faire appel a l'appli installée sur le périphérique. Pour intégrer cette appli a son site internet il suffit d'ajouter le fichier javascript téléchargeable [ici](https://castle.so/dl/5tt6l+s) sur la page contenant le formulaire. Et ensuite il suffit d'utiliser le helper pour générer l'url à passer a l'appli pour traiter le fichier.

{% highlight javascript %}
```javascript
$(function() {
Picup.convertFileInput('input',{
'referername': escape('referer'),
Expand All @@ -36,17 +36,17 @@ $(function() {
'referrerfavicon': escape('icone a afficher dans l application')
});
});
{% endhighlight %}
```

Ne pas oublier de faire de la détection de navigateur ajant d'ajouter ce script, car sur le navigateur natif android l'upload marche. Sur la page indiquée en callback, il peut être utile de créer une fonction de callback avec le helper picup pour faire un traitement supplémentaire sur les fichiers uploadés avec l'application.

{% highlight javascript %}
```javascript
Picup.callbackHandler = function(params){
for(var key in params){
alert(key+' == '+params[key]);
}
}
{% endhighlight %}
```
Pour voir le résultat il y a une démo sur le site de l'application, avec un [scratchpad](http://picupapp.com/scratchpad.html) qui permet de modifier les paramètres de la requête afin de faire les tests directement sur son serveur.

Voilà pour le côter javascript, il reste a écrire côter serveur la méthode qui va traiter la requête POST qui va être faite par picup et l'intégration est terminée. Le rendu est un bouton à la place du champ `<input type="file">` qui va ouvrir l'application et permettre à l'utilisateur de choisir une image parmis sa galerie.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@ Le dernier point à aborder, c'est la mise a jour de ces javascripts minifiés.
Pour le code, voici les différents fichier :
Tout d'abord le `AssetHelper.php`

{% highlight php %}
```php
<?php
function get_javascripts()
{
Expand Down Expand Up @@ -75,11 +75,11 @@ function get_javascripts()

return $html;
}
{% endhighlight %}
```

Ensuite la tâche de minification `genMinifiedJs.php` à placer à la racine du répertoire lib du projet symfony

{% highlight php %}
```php
#!/usr/bin/env php
<?php

Expand Down Expand Up @@ -114,7 +114,7 @@ if ($argc) {
die; //Une instance existe déja, on quitte le navire
}
}
{% endhighlight %}
```

Et voilà, maintenant, à chaque page un seule javascript sera chargé et une fois qu'il sera mis en cache par le navigateur, le temps de chargement du site sera bien réduit.

Expand Down
36 changes: 18 additions & 18 deletions _posts/2012-04-25-deployer-un-projet-symfony-2-avec-capifony.md
Original file line number Diff line number Diff line change
Expand Up @@ -25,23 +25,23 @@ Aujourd'hui j'ai voulu tester [capifony](http://capifony.org/). C'est un petit p

Tout d'abord il faut installer la gem capifony :

{% highlight bash %}
```bash
gem install capifony
{% endhighlight %}
```

Ensuite il faut se rendre dans le répertoire de son projet pour initialiser capifony.

{% highlight bash %}
```bash
export PATH=$PATH:~/.gem/ruby/version/bin
cd /path/of/project
capifony .
{% endhighlight %}
```

Cette commande va créer un fichier `Capfile` à la racine de votre projet et un fichier `deploy.rb` dans le dossier `app/config/`, ou dans le dossier `config/` pour un projet symfony 1.4.

Ensuite il faut configurer le fichier deploy.rb afin de spécifier tous les paramètres nécessaires au déploiement.

{% highlight ruby %}
```ruby
set :domain, "" # adresse du serveur de production
set :deploy_to, "" # répertoire ou déployer
set :app_path, "app"
Expand All @@ -61,48 +61,48 @@ role :db, domain, :primary => true # This is where Rails migrations will run
set :use_sudo, false
set :use_composer, false
set :keep_releases, 3
{% endhighlight %}
```

Il est possible de définit une option en plus si l'utilisateur sur le serveur de production est différent de celui de la machine locale :

{% highlight ruby %}
```ruby
set :user, "" # utilisateur distant
{% endhighlight %}
```

Pour un projet Symfony 2 il peut être utile d'ajouter ces options la, pour partager le dossier `vendors/` et `logs/`  entre toutes les releases et le fichier `parameters.ini`.

{% highlight ruby %}
```ruby
set :shared_files, ["app/config/parameters.ini"]
set :shared_children, [app_path + "/logs", web_path + "/uploads", "vendor"]
set :update_vendors, true
{% endhighlight %}
```

Si votre projet utilise Composer comme gestionnaire de dépendances il faut aussi rajouter cette option :

{% highlight ruby %}
```ruby
set :use_composer, true
{% endhighlight %}
```

Une fois ce fichier modifié, il faut initialiser la structure des dossiers sur le serveur de production en tapant cette commande :

{% highlight bash %}
```bash
cap deploy:setup
{% endhighlight %}
```

Il faut maintenant configurer sur le serveur de production le fichier `parameters.ini` :

{% highlight bash %}
```bash
ssh production_server
cd /path/to/project/shared
mkdir -p app/config
vim app/config/parameters.ini
{% endhighlight %}
```

Et une fois toutes ces étapes finies avec succès, il suffit juste de lancer la commande :

{% highlight bash %}
```bash
cap deploy
{% endhighlight %}
```

Cette commande va créer un nouveau dossier dans `/path/to/project/releases` et faire pointer le dossier `current/` vers cette dernière release. Ensuite installer les vendors si c'est un projet Symfony 2, publier les assets, vider le cache et lancer tous les hooks lié au scm.

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
layout: post
title: "Corriger le problème de GDM sur Archlinux après la màj 3.8"
description: ""
category:
category:
tags:
- system
- linux
Expand All @@ -18,14 +18,14 @@ Après la dernière mise à jour majeur de gnome vers la version 3.8, gdm ne se
Le problème vient de la méthode d'accélération du pilote graphique intel. Par défaut c'est `UXA` qui est plus stable techniquement mais qui est plus lente que la méthode `SNA`.
Il faut donc changer de méthode pour passer à `SNA` qui est plus rapide et nécessaire pour gnome.

{% highlight bash %}
```bash
#/etc/X11/xorg.conf.d/20-intel.conf

Section "Device"
Identifier "Intel Graphics"
Driver "intel"
Option "AccelMethod" "sna"
EndSection
{% endhighlight %}
```

Il suffit de redémarrer et le tour est joué.
Il suffit de redémarrer et le tour est joué.
Loading

0 comments on commit 9d6a961

Please sign in to comment.