Développeur Web RoR

Aller au contenu | Aller au menu | Aller à la recherche

Tag - astuce

Fil des billets

mardi 11 juillet 2017

Manipuler les migrations SchemaMigrations dans une console rails [RAILS 4 / 5]

Pour réparer une boulette, je suis tombé là-dessus pour manipuler les migrations en console rails et c'est bien pensé :

http://stackoverflow.com/questions/19100303/schema-migrations-table

En résumé on définit un model pour mapper la table schema_migrations (vous pouvez taper ceci tel quel en console) : 

class SchemaMigration < ActiveRecord::Base; self.primary_key = :version; end

On a ensuite accès à l'api ActiveRecord. Du coup j'ai corrigé ma bêtise comme ça : 

SchemaMigration.where(version: '20161020124307').first.update_attribute(:version, '20161026065007')

JS : Afficher un menu qui ce cache quand on clique ailleurs que sur un élément du menu

Cas d'utilisation : un menu déroulant qui s'affiche lors d'une recherche (le menu contient des éléments cliquables et quand on clique ailleurs sur la page on souhaite masquer le menu :

$(document).on('click', 'body', function(e){
// Quand on clique sur le body on cache la zone
$('#zone-a-cacher').hide();
});
$(document).on('click', '#zone-a-cacher', function(e){
// Evite que l'évènement ne soit propagé jusqu'au body
// (car sinon la zone serait de nouveau cachée)
e.stopPropagation();
e.stopImmediatePropagation();
});

mercredi 25 janvier 2012

Ouvrir un tunnel SSH

Qu'est ce qu'un tunnel ssh ?

Un tunnel ssh est un conduit qui permet de faire transiter tout ce que l'on veut à travers ssh.

Voici un schema explicatif :

Pourquoi utiliser un tunnel ssh ?

L'intérêt principal est la sécurité. Seul le port 22 est écoute par le serveur en question (ssh est crypté et sécurisé). D'autre part (intérêt pour le fainéant) en utilisant des tunnels ssh ça vous permet de ne pas ouvrir des ports pour tout et n'importe quoi.

Comment le mettre en place ?

ssh -L port_local:localhost:port_sur_le_serveur -XC user@serveur

Exemples : 

pour VNC (port 5900) :

ssh -L 5900:localhost:5900 -XC me@example.com

pour SVN (port 3690) :

ssh -L 3690:localhost:3690 -XC me@example.com

Une fois le tunnel ssh ouvert vous pouvez sur votre poste faire comme si le service et sur localhost. Donc pour pouvez vous connecter avec vinagre (client VNC) sur localhost pour prendre la main sur example.com :

vinagre localhost:5900

D'une manière générale, si vous configurez vino (VNC server) pour écouter sur le port 5987 vous pourrez faire :

ssh -L Y:localhost:5987 -XC me@example.com

vinagre localhost:Y

Y étant un port quelconque n'étant pas déjà utilisé par localhost.

Sur windows y a pas de soucis vous pouvez ouvrir votre tunnel ssh en utilisant putty. (voir le Wiki de korben pour la config de putty : http://free.korben.info/index.php/Tunnel_SSH)

Il est également possible de changer le port de ssh...


mardi 6 décembre 2011

Changer une colonne (champ) de toutes les lignes d'une table (instances de model) avec rubyonrails

Il peut être avantagieux de changer une colonne dans toute une table :

MonModel.update_all(:attribut_en_question => valeur)

Exemple :

Product.update_all(:price => 10.0)

C'était la petite astuce du jour !

dimanche 27 novembre 2011

Rails 3 default_scope et unscoped

Rails 3 a apporté un petit truc sympa le default_scope. Il permet d'appeler un scope par défaut sur un model. Par contre il peut être sympa dans certain cas d'éviter d'utiliser le default_scope. C'est pour cette raison qu'il existe unscoped

Exemple :

class Product < ActiveRecord::Base

  default_scope :order_by_name, order(:name)

end

# Ordonné par name

# SELECT * FROM products ORDER BY name;

Product.all 

# SELECT * FROM products;

Product.unscoped.all

A retenir ! En même temps c'est pas très compliqué !