<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="fr">
	<id>https://lea-linux.org/docs/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Gedsismik</id>
	<title>Lea Linux - Contributions [fr]</title>
	<link rel="self" type="application/atom+xml" href="https://lea-linux.org/docs/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Gedsismik"/>
	<link rel="alternate" type="text/html" href="https://lea-linux.org/documentations/Sp%C3%A9cial:Contributions/Gedsismik"/>
	<updated>2026-04-06T02:07:08Z</updated>
	<subtitle>Contributions</subtitle>
	<generator>MediaWiki 1.40.1</generator>
	<entry>
		<id>https://lea-linux.org/docs/index.php?title=Mod%C3%A8le:Copy&amp;diff=13927</id>
		<title>Modèle:Copy</title>
		<link rel="alternate" type="text/html" href="https://lea-linux.org/docs/index.php?title=Mod%C3%A8le:Copy&amp;diff=13927"/>
		<updated>2006-11-02T19:07:41Z</updated>

		<summary type="html">&lt;p&gt;Gedsismik : /* Copyright */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Copyright =&lt;br /&gt;
Copyright &amp;amp;copy; 2006, Misc&lt;br /&gt;
{{CC-BY-SA}}&lt;/div&gt;</summary>
		<author><name>Gedsismik</name></author>
	</entry>
	<entry>
		<id>https://lea-linux.org/docs/index.php?title=Ruby_On_Rails&amp;diff=13867</id>
		<title>Ruby On Rails</title>
		<link rel="alternate" type="text/html" href="https://lea-linux.org/docs/index.php?title=Ruby_On_Rails&amp;diff=13867"/>
		<updated>2006-10-19T20:12:20Z</updated>

		<summary type="html">&lt;p&gt;Gedsismik : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Développer sous Linux]]&lt;br /&gt;
= Ruby On Rails =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;leatitre&amp;quot;&amp;gt;Ruby On Rails&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;leapar&amp;quot;&amp;gt;par [mailto:gedsismik_at_free_point_fr GEDsismik]&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;leadesc&amp;quot;&amp;gt;Monter un projet Ruby On Rails (RoR) pas à pas.&amp;lt;/div&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Avant propos ==&lt;br /&gt;
&lt;br /&gt;
Ruby On Rails (RoR) est un framework web écrit en ruby. Ce document vous présente comment faire un petit projet Ruby On Rails.&lt;br /&gt;
&lt;br /&gt;
On supposera installé et correctement configuré :&lt;br /&gt;
 - un SGBD supporté par RoR (personnellement, j&#039;utilise MySQL)&lt;br /&gt;
 - Ruby&lt;br /&gt;
 - Rails et ses dépendances&lt;br /&gt;
&lt;br /&gt;
Il vous faudra aussi des notions de ruby.&lt;br /&gt;
&lt;br /&gt;
Dans ce document, je mettrais en place un gestionnaire de livre rudimentaire. Le but est de présenter les bases d&#039;un projet Rails. Il est évident que ces informations sont loin d&#039;être exhaustives vue que RoR peut remplir tout un livre de 500 pages.&lt;br /&gt;
&lt;br /&gt;
== Mise en place de l&#039;environnement ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;$ rails monsite&lt;br /&gt;
      create  &lt;br /&gt;
      create  app/controllers&lt;br /&gt;
      create  app/helpers&lt;br /&gt;
      create  app/models&lt;br /&gt;
      create  app/views/layouts&lt;br /&gt;
[...]&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
Le répertoire monsite vient d&#039;être créé ainsi que la structure initiale du projet. Entrez maintenant dans ce répertoire.&lt;br /&gt;
Normalement, il devrait contenir les fichiers et répertoires suivants : &lt;br /&gt;
&amp;lt;code&amp;gt;app&lt;br /&gt;
components&lt;br /&gt;
config&lt;br /&gt;
db&lt;br /&gt;
doc&lt;br /&gt;
lib&lt;br /&gt;
log&lt;br /&gt;
public&lt;br /&gt;
Rakefile&lt;br /&gt;
README&lt;br /&gt;
script&lt;br /&gt;
test&lt;br /&gt;
tmp&lt;br /&gt;
vendor&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Configuration ==&lt;br /&gt;
&lt;br /&gt;
Si vous n&#039;avez pas de base de donnée, créez-en :&lt;br /&gt;
&amp;lt;code&amp;gt;mysql&amp;gt; create database monsite_development;&lt;br /&gt;
mysql&amp;gt; create database monsite_test;&lt;br /&gt;
mysql&amp;gt; create database monsite_production;&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;aparte&amp;quot;&amp;gt;&lt;br /&gt;
Note : J&#039;en ai crée 3 pour pouvoir utiliser 3 environnements différents. Une seule peut suffir, ca dépend de ce que vous voulez faire.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous allons ensuite éditer ./config/database.yml. Vous avez 3 environnements de pré-configurées de la sorte : &lt;br /&gt;
&amp;lt;code&amp;gt;production:&lt;br /&gt;
  adapter: mysql&lt;br /&gt;
  database: monsite_production&lt;br /&gt;
  username: root&lt;br /&gt;
  password:&lt;br /&gt;
  host: localhost&amp;lt;/code&amp;gt;&lt;br /&gt;
Avec :&lt;br /&gt;
* adapter le type de base de donnée (mysql, postgres, sqlite...)&lt;br /&gt;
* database le nom de la base de donnée&lt;br /&gt;
* username le nom de l&#039;utilisateur de la base de donnée&lt;br /&gt;
* password le mot de passe à la base de donnée&lt;br /&gt;
* host le serveur de base de donnée&lt;br /&gt;
Dans le cas de sqlite, on a :&lt;br /&gt;
* adapter le type de base de donnée (sqlite)&lt;br /&gt;
* dbfile nom du fichier de base de donnée &lt;br /&gt;
&lt;br /&gt;
Editez-le en fonction des paramètres de votre base de donnée. Exemple :&lt;br /&gt;
&amp;lt;code&amp;gt;production:&lt;br /&gt;
  adapter: mysql&lt;br /&gt;
  database: monsite_production&lt;br /&gt;
  username: gedsismik&lt;br /&gt;
  password: mypassword&lt;br /&gt;
  host: localhost&lt;br /&gt;
  socket: /var/run/mysql/mysql.sock&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;aparte&amp;quot;&amp;gt;&lt;br /&gt;
Note : Sous Slackware, j&#039;ai du ajouter la ligne &amp;lt;code&amp;gt;socket: /var/run/mysql/mysql.sock&amp;lt;/code&amp;gt; sinon il ne trouve pas la socket MySQL.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Modèle MVC ==&lt;br /&gt;
&lt;br /&gt;
Ruby On Rails utilise le motif de conception MVC (modèle-vue-contrôleur). Je m&#039;explique : dans un projet RoR, vous séparez :&lt;br /&gt;
 - les modèles (répertoire &amp;lt;code&amp;gt;./app/models&amp;lt;/code&amp;gt;) : ce qui concerne les données. Dans notre cas, c&#039;est donc principalement les tables des bases de données.&lt;br /&gt;
 - les vues (répertoire &amp;lt;code&amp;gt;./app/views&amp;lt;/code&amp;gt;) : ce qui concerne l&#039;interface. Dans notre cas, il s&#039;agit de la présentation des pages (en HTML et Ruby embarqué, nous verrons ça plus tard).&lt;br /&gt;
 - les contrôleurs (répertoire &amp;lt;code&amp;gt;./app/controllers&amp;lt;/code&amp;gt;) : concerne la gestion des évenements. Dans notre cas, ce sont les classes qui feront le lien entre les tables (models) et le html (views). Ce qui revient aux appels aux tables via les modèles et la création de variables dont le contenu sera affiché dans les vues.&lt;br /&gt;
&lt;br /&gt;
Pour palier à certaines fonctions qui ne peuvent pas suivre le modèle MVC à la lettre, Rails dispose d&#039;une partie appelée helpers (&amp;lt;code&amp;gt;./app/helpers&amp;lt;/code&amp;gt;) qui contient des classes accessibles aux vues et qui contient du code ayant accès aux modèles sans passer par les contrôleurs.&lt;br /&gt;
&lt;br /&gt;
== Création des modèles ==&lt;br /&gt;
&lt;br /&gt;
=== Génération des fichiers relatifs à la table ===&lt;br /&gt;
&lt;br /&gt;
On va utilisez le script &amp;lt;code&amp;gt;./script/generate&amp;lt;/code&amp;gt; pour générer la première table.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;$ ./script/generate model livre&lt;br /&gt;
      exists  app/models/&lt;br /&gt;
      exists  test/unit/&lt;br /&gt;
      exists  test/fixtures/&lt;br /&gt;
      create  app/models/livre.rb&lt;br /&gt;
      create  test/unit/livre_test.rb&lt;br /&gt;
      create  test/fixtures/livres.yml&lt;br /&gt;
      create  db/migrate&lt;br /&gt;
      create  db/migrate/001_create_livres.rb&lt;br /&gt;
$ ./script/generate model auteur&lt;br /&gt;
      exists  app/models/&lt;br /&gt;
      exists  test/unit/&lt;br /&gt;
      exists  test/fixtures/&lt;br /&gt;
      create  app/models/auteur.rb&lt;br /&gt;
      create  test/unit/auteur_test.rb&lt;br /&gt;
      create  test/fixtures/auteurs.yml&lt;br /&gt;
      exists  db/migrate&lt;br /&gt;
      create  db/migrate/002_create_auteurs.rb&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Fichiers de migration ===&lt;br /&gt;
&lt;br /&gt;
Les fichiers de migration/création de table se trouvent dans &amp;lt;code&amp;gt;./db/migrate&amp;lt;/code&amp;gt;. Il va falloir les éditez pour ajoutez les champs que vous voulez.&lt;br /&gt;
&amp;lt;div class=&amp;quot;aparte&amp;quot;&amp;gt;&lt;br /&gt;
Note : ne faites pas de champ &amp;quot;id&amp;quot;, ils sont automatiquement créés et gérer par Rails.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Fichier ./db/migrate/001_create_livres.rb ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;class CreateLivres &amp;lt; ActiveRecord::Migration&lt;br /&gt;
	def self.up&lt;br /&gt;
		create_table :livres do |t|&lt;br /&gt;
			t.column :titre, :string, :null =&amp;gt; false&lt;br /&gt;
			t.column :auteur_id, :integer, :null =&amp;gt; false&lt;br /&gt;
			t.column :quantite, :integer, :default =&amp;gt; &amp;quot;1&amp;quot;&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	def self.down&lt;br /&gt;
		drop_table :livres&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Fichier ./db/migrate/002_create_auteurs.rb ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;class CreateAuteurs &amp;lt; ActiveRecord::Migration&lt;br /&gt;
	def self.up&lt;br /&gt;
		create_table :auteurs do |t|&lt;br /&gt;
			t.column :nom, :string&lt;br /&gt;
			t.column :prenom, :string&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	def self.down&lt;br /&gt;
		drop_table :auteurs&lt;br /&gt;
	end&lt;br /&gt;
end&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;aparte&amp;quot;&amp;gt;Notez que vous pouvez réunir les deux fichiers en un seul :&lt;br /&gt;
./db/migrate/001_initial.rb&lt;br /&gt;
&amp;lt;code&amp;gt;class Initial &amp;lt; ActiveRecord::Migration&lt;br /&gt;
	def self.up&lt;br /&gt;
		create_table :livres do |t|&lt;br /&gt;
			t.column :titre, :string, :null =&amp;gt; false&lt;br /&gt;
			t.column :auteur_id, :integer, :null =&amp;gt; false&lt;br /&gt;
			t.column :quantite, :integer, :default =&amp;gt; &amp;quot;1&amp;quot;&lt;br /&gt;
		end&lt;br /&gt;
		create_table :auteurs do |t|&lt;br /&gt;
			t.column :nom, :string, :null =&amp;gt; false&lt;br /&gt;
			t.column :prenom, :string&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	def self.down&lt;br /&gt;
		drop_table :livres&lt;br /&gt;
		drop_table :auteurs&lt;br /&gt;
	end&lt;br /&gt;
end&amp;lt;/code&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Génération des tables ===&lt;br /&gt;
&lt;br /&gt;
Toujours dans le repertoire monsite, exécutez &amp;lt;code&amp;gt;rake migrate&amp;lt;/code&amp;gt;.&lt;br /&gt;
&amp;lt;code&amp;gt;$ rake migrate&lt;br /&gt;
(in /home/gedsismik/monsite)&lt;br /&gt;
== CreateLivres: migrating ====================================================&lt;br /&gt;
-- create_table(:livres)&lt;br /&gt;
   -&amp;gt; 0.0441s&lt;br /&gt;
== CreateLivres: migrated (0.0442s) ===========================================&lt;br /&gt;
&lt;br /&gt;
== CreateAuteurs: migrating ===================================================&lt;br /&gt;
-- create_table(:auteurs)&lt;br /&gt;
   -&amp;gt; 0.0457s&lt;br /&gt;
== CreateAuteurs: migrated (0.0458s) ==========================================&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Si vous regardez dans votre base de donnée, vous trouverez donc 3 tables :&lt;br /&gt;
 - auteurs&lt;br /&gt;
 - livres&lt;br /&gt;
 - schema_info&lt;br /&gt;
&lt;br /&gt;
Cette dernière table contient en fait la version de la base de donnée. Les versions sont incrémentées lors du &amp;lt;code&amp;gt;./script/generate model &amp;lt;nom table&amp;gt;&amp;lt;/code&amp;gt; et sont contenus dans le nom du fichier &amp;lt;code&amp;gt;./db/migrate/001_initial.rb&amp;lt;/code&amp;gt; est donc la version 1 de la base.&lt;br /&gt;
&lt;br /&gt;
=== Edition des modèles ===&lt;br /&gt;
Intéressons-nous aux fichiers &amp;lt;code&amp;gt;./app/models/auteur.rb&amp;lt;/code&amp;gt; et &amp;lt;code&amp;gt;./app/models/livre.rb&amp;lt;/code&amp;gt;. Ces classes héritant de ActiveRecord::Base, presque tout est déjà fait. Nous allons juste ajouter la relation : &amp;quot;un auteur écrit plusieurs livres&amp;quot;. Cette relation se traduit dans &amp;lt;code&amp;gt;./app/models/auteur.rb&amp;lt;/code&amp;gt; par :&lt;br /&gt;
&amp;lt;code&amp;gt;class Auteur &amp;lt; ActiveRecord::Base&lt;br /&gt;
	has_many :livre&lt;br /&gt;
end&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En contrepartie, on peut avoir besoin d&#039;accéder à l&#039;auteur d&#039;un livre. Modifions donc &amp;lt;code&amp;gt;./app/models/livre.rb&amp;lt;/code&amp;gt; en :&lt;br /&gt;
&amp;lt;code&amp;gt;class Livre &amp;lt; ActiveRecord::Base&lt;br /&gt;
	belongs_to :auteur&lt;br /&gt;
end&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Et voilà ! Ca devrait suffir pour les modèles. En effet, Rails fera tout seul le lien entre les deux tables grâce à auteur_id.&lt;br /&gt;
&lt;br /&gt;
== Création d&#039;un contrôleur ==&lt;br /&gt;
Tout d&#039;abord, utilisons, comme pour les modèles, le script &amp;lt;code&amp;gt;./script/generate&amp;lt;/code&amp;gt; :&lt;br /&gt;
&amp;lt;code&amp;gt;$ ./script/generate controller bibliotheque&lt;br /&gt;
      exists  app/controllers/&lt;br /&gt;
      exists  app/helpers/&lt;br /&gt;
      create  app/views/bibliotheque&lt;br /&gt;
      exists  test/functional/&lt;br /&gt;
      create  app/controllers/bibliotheque_controller.rb&lt;br /&gt;
      create  test/functional/bibliotheque_controller_test.rb&lt;br /&gt;
      create  app/helpers/bibliotheque_helper.rb&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Editons maintenant &amp;lt;code&amp;gt;./app/controllers/bibliotheque_controller.rb&amp;lt;/code&amp;gt;. Par défaut, vous avez :&lt;br /&gt;
&amp;lt;code&amp;gt;class BibliothequeController &amp;lt; ApplicationController&lt;br /&gt;
end&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous allons créer des actions. Un contrôleur peut comporter plusieurs actions.&lt;br /&gt;
&amp;lt;code&amp;gt;class BibliothequeController &amp;lt; ApplicationController&lt;br /&gt;
	def index&lt;br /&gt;
		listeAuteur&lt;br /&gt;
		render_action &#039;listeAuteur&#039;&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	def listeAuteur&lt;br /&gt;
		@auteurs = Auteur.find(:all, :order =&amp;gt; &amp;quot;nom,prenom&amp;quot;)&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	def ajoutAuteur&lt;br /&gt;
		param = @params[&#039;auteur&#039;]&lt;br /&gt;
		auteur = Auteur.new(param)&lt;br /&gt;
		if auteur.save&lt;br /&gt;
			flash[:ok] = &amp;quot;L&#039;auteur a &amp;amp;eacute;t&amp;amp;eacute; ajout&amp;amp;eacute;&amp;quot;&lt;br /&gt;
		else&lt;br /&gt;
			flash[:error] = &amp;quot;Probl&amp;amp;egrave;me à l&#039;ajout de l&#039;auteur&amp;quot;&lt;br /&gt;
		end&lt;br /&gt;
		# ajoutAuteur n&#039;a pas besoin de vue. Une fois l&#039;auteur ajouté&lt;br /&gt;
		# on réaffiche la liste &lt;br /&gt;
		redirect_to :action =&amp;gt; &#039;listeAuteur&#039;&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
L&#039;action index est l&#039;action par défaut. L&#039;action listeAuteur donnera la liste des auteurs. On constate ici qu&#039;on peut largement se passer d&#039;écrire du SQL dans Rails. @auteurs est une variable qui contiendra tous les auteurs.&lt;br /&gt;
&lt;br /&gt;
== Mise en place des vues ==&lt;br /&gt;
&lt;br /&gt;
=== Le layout ===&lt;br /&gt;
&lt;br /&gt;
Tout d&#039;abord, créons une layout. Le layout est la structure commune à toutes les pages. Ils se trouvent dans &amp;lt;code&amp;gt;./app/views/layouts/&amp;lt;/code&amp;gt;.&lt;br /&gt;
&amp;lt;code&amp;gt;$ touch app/views/layouts/bibliotheque.rhtml&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
Editons maintenant ce fichier :&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;!DOCTYPE HTML PUBLIC &amp;quot;-//W3C//DTD HTML 4.0 Transitional//FR&amp;quot; &amp;quot;http://www.w3.org/TR/html4/loose.dtd&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
&amp;lt;head&amp;gt;&lt;br /&gt;
        &amp;lt;title&amp;gt;Biblioth&amp;amp;egrave;que - &amp;lt;%= controller.action_name %&amp;gt;&amp;lt;/title&amp;gt;&lt;br /&gt;
        &amp;lt;meta name=&amp;quot;author&amp;quot; content=&amp;quot;GEDsismik&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;meta http-equiv=&amp;quot;Content-Type&amp;quot; content=&amp;quot;text/html; charset=iso-8859-15&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/head&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
        &amp;lt;h1&amp;gt;Biblioth&amp;amp;egrave;que&amp;lt;/h1&amp;gt;&lt;br /&gt;
        &amp;lt;br/&amp;gt;&lt;br /&gt;
        &amp;lt;div class=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;p style=&amp;quot;color: green&amp;quot;&amp;gt;&amp;lt;%= flash[:notice] %&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
        &amp;lt;%= @content_for_layout %&amp;gt;&lt;br /&gt;
        &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
C&#039;est du Ruby embarqué dans du HTML. Pour ceux qui connaissent, c&#039;est un peu le même principe que le PHP. On écrit du HTML et aux endroits où on veut mettre du ruby, on place le code dans une balise &amp;lt;code&amp;gt;&amp;lt;% #code %&amp;gt;&amp;lt;/code&amp;gt;. Si on veut afficher la sortie du code, on place le code dans une balise &amp;lt;code&amp;gt;&amp;lt;%= #code %&amp;gt;&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;%= @content_for_layout %&amp;gt;&amp;lt;/code&amp;gt; affichera la partie propre à l&#039;action.&lt;br /&gt;
&lt;br /&gt;
=== La vue ===&lt;br /&gt;
&lt;br /&gt;
Les vues sont dans un répertoire de la forme &amp;lt;code&amp;gt;./app/views/&amp;lt;contrôleur&amp;gt;/&amp;lt;/code&amp;gt; et porte le nom &amp;lt;code&amp;gt;&amp;lt;action&amp;gt;.rhtml&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Créons donc le fichier &amp;lt;code&amp;gt;./app/views/bibliotheque/listeAuteur.rhtml&amp;lt;/code&amp;gt; :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;h2&amp;gt;Liste des auteurs&amp;lt;/h2&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;%&lt;br /&gt;
	@auteurs.each do |auteur|&lt;br /&gt;
		%&amp;gt;&amp;lt;li&amp;gt;&amp;lt;%= auteur.nom + &amp;quot; &amp;quot; + auteur.prenom %&amp;gt;&amp;lt;/li&amp;gt;&amp;lt;%&lt;br /&gt;
	end&lt;br /&gt;
%&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h2&amp;gt;Ajout d&#039;un auteur&amp;lt;/h2&amp;gt;&lt;br /&gt;
&amp;lt;%= start_form_tag :action =&amp;gt; &amp;quot;ajoutAuteur&amp;quot; %&amp;gt;&lt;br /&gt;
	&amp;lt;p&amp;gt;&amp;lt;label&amp;gt;Pr&amp;amp;eacute;nom : &amp;lt;%= text_field &#039;auteur&#039;, &#039;prenom&#039; %&amp;gt;&amp;lt;/label&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
	&amp;lt;p&amp;gt;&amp;lt;label&amp;gt;Nom : &amp;lt;%= text_field &#039;auteur&#039;, &#039;nom&#039; %&amp;gt;&amp;lt;/label&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
	&amp;lt;%= submit_tag(&amp;quot;Ajouter&amp;quot;) %&amp;gt;&lt;br /&gt;
&amp;lt;%= end_form_tag %&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== WebRick ==&lt;br /&gt;
&lt;br /&gt;
Vous disposez d&#039;un serveur de test appellé WebRick. Pour le lancez, tapez &amp;lt;code&amp;gt;./script/server &amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;$ ./script/server &lt;br /&gt;
=&amp;gt; Booting WEBrick...&lt;br /&gt;
=&amp;gt; Rails application started on http://0.0.0.0:3000&lt;br /&gt;
=&amp;gt; Ctrl-C to shutdown server; call with --help for options&lt;br /&gt;
[2006-10-19 18:32:57] INFO  WEBrick 1.3.1&lt;br /&gt;
[2006-10-19 18:32:57] INFO  ruby 1.8.5 (2006-08-25) [i686-linux]&lt;br /&gt;
[2006-10-19 18:32:57] INFO  WEBrick::HTTPServer#start: pid=26166 port=3000&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Par défaut, ce serveur écoute le port 3000. Ouvrez donc un navigateur et tapez : &amp;lt;code&amp;gt;http://localhost:3000&amp;lt;/code&amp;gt;.&lt;br /&gt;
Normalement, vous devriez obtenir une page de test. Les url de Rails par défaut se décompose de la sorte &amp;lt;code&amp;gt;http://localhost:3000/&amp;lt;contrôleur&amp;gt;/&amp;lt;action&amp;gt;[/&amp;lt;parametres&amp;gt;]&amp;lt;/code&amp;gt;. Tapez donc dans votre navigateur &amp;lt;code&amp;gt;http://localhost:3000/bibliotheque/listeAuteur&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Pour aller un peu plus loin ==&lt;br /&gt;
Ajoutons le support des livres dans &amp;lt;code&amp;gt;./app/controllers/bibliotheque_controller.rb&amp;lt;/code&amp;gt; :&lt;br /&gt;
&amp;lt;code&amp;gt;class BibliothequeController &amp;lt; ApplicationController&lt;br /&gt;
	def index&lt;br /&gt;
		listeLivre&lt;br /&gt;
		render_action &#039;listeLivre&#039;&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	def listeAuteur&lt;br /&gt;
		@auteurs = Auteur.find(:all, :order =&amp;gt; &amp;quot;nom,prenom&amp;quot;)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	def listeLivre&lt;br /&gt;
		@livres = Livre.find(:all, :order =&amp;gt; &amp;quot;titre&amp;quot;)&lt;br /&gt;
		@auteurs = Auteur.find(:all, :order =&amp;gt; &amp;quot;nom,prenom&amp;quot;).map{ |u| [ u.nom + &amp;quot; (&amp;quot; + u.prenom + &amp;quot;)&amp;quot;, u.id] }&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	def ajoutAuteur&lt;br /&gt;
		param = @params[&#039;auteur&#039;]&lt;br /&gt;
		auteur = Auteur.new(param)&lt;br /&gt;
		if auteur.save&lt;br /&gt;
			flash[:ok] = &amp;quot;L&#039;auteur a &amp;amp;eacute;t&amp;amp;eacute; ajout&amp;amp;eacute;&amp;quot;&lt;br /&gt;
		else&lt;br /&gt;
			flash[:error] = &amp;quot;Probl&amp;amp;egrave;me à l&#039;ajout de l&#039;auteur&amp;quot;&lt;br /&gt;
		end&lt;br /&gt;
		redirect_to :action =&amp;gt; &#039;listeAuteur&#039;&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	def ajoutLivre&lt;br /&gt;
		param = @params[&#039;livre&#039;]&lt;br /&gt;
		livre = Livre.new(param)&lt;br /&gt;
		if livre.save&lt;br /&gt;
			flash[:ok] = &amp;quot;Le livre a &amp;amp;eacute;t&amp;amp;eacute; ajout&amp;amp;eacute;&amp;quot;&lt;br /&gt;
		else&lt;br /&gt;
			flash[:error] = &amp;quot;Probl&amp;amp;egrave;me à l&#039;ajout du livre&amp;quot;&lt;br /&gt;
		end&lt;br /&gt;
		redirect_to :action =&amp;gt; &#039;listeLivre&#039;&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Créons du même coup la vue correspondante à listeLivre &amp;lt;code&amp;gt;./app/views/bibliotheque/listeLivre.rhtml&amp;lt;/code&amp;gt; :&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;% if @livres.blank? %&amp;gt;&lt;br /&gt;
	&amp;lt;h2&amp;gt;Liste des ouvrages&amp;lt;/h2&amp;gt;&lt;br /&gt;
	&amp;lt;ul&amp;gt;&lt;br /&gt;
	&amp;lt;%&lt;br /&gt;
		@livres.each do |livre|&lt;br /&gt;
			%&amp;gt;&amp;lt;li&amp;gt;&amp;lt;%= livre.titre %&amp;gt; - &amp;lt;%= livre.auteur.prenom + &amp;quot; &amp;quot; + livre.auteur.nom %&amp;gt;&amp;lt;/li&amp;gt;&amp;lt;%&lt;br /&gt;
		end&lt;br /&gt;
	%&amp;gt;&lt;br /&gt;
	&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;% else %&amp;gt;&lt;br /&gt;
	&amp;lt;i&amp;gt;La bibliothèque ne contient aucun livre.&amp;lt;/i&amp;gt;&lt;br /&gt;
&amp;lt;% end %&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;% unless @auteurs.blank? %&amp;gt;&lt;br /&gt;
	&amp;lt;h2&amp;gt;Ajout d&#039;un livre&amp;lt;/h2&amp;gt;&lt;br /&gt;
	&amp;lt;%= start_form_tag :action =&amp;gt; &amp;quot;ajoutLivre&amp;quot; %&amp;gt;&lt;br /&gt;
		&amp;lt;p&amp;gt;&amp;lt;label&amp;gt;Titre : &amp;lt;%= text_field &#039;livre&#039;, &#039;titre&#039; %&amp;gt;&amp;lt;/label&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
		&amp;lt;p&amp;gt;&amp;lt;label&amp;gt;Nombre d&#039;exemplaire : &amp;lt;%= text_field &#039;livre&#039;, &#039;quantite&#039; %&amp;gt;&amp;lt;/label&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
		&amp;lt;p&amp;gt;&amp;lt;label&amp;gt;Auteur : &amp;lt;%= select(&#039;livre&#039;, &#039;auteur_id&#039;, @auteurs) %&amp;gt;&amp;lt;/label&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
		&amp;lt;%= submit_tag(&amp;quot;Ajouter&amp;quot;) %&amp;gt;&lt;br /&gt;
	&amp;lt;%= end_form_tag %&amp;gt;&lt;br /&gt;
&amp;lt;% end %&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Les environnements ==&lt;br /&gt;
Pour utiliser les différents environnements, vous devez manipuler la variable &amp;lt;code&amp;gt;RAILS_ENV&amp;lt;/code&amp;gt;. Par défaut, vous êtes dans le premier environnement du fichier &amp;lt;code&amp;gt;./config/database.yml&amp;lt;/code&amp;gt; (à savoir en général development). Pour un &amp;lt;code&amp;gt;rake migrate&amp;lt;/code&amp;gt; en production par exemple :&lt;br /&gt;
&amp;lt;code&amp;gt;RAILS_ENV=production rake migrate&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
notez que l&#039;environnement &amp;lt;code&amp;gt;test&amp;lt;/code&amp;gt; efface les tables à chaque &amp;lt;code&amp;gt;rake&amp;lt;/code&amp;gt; et que l&#039;environnement &amp;lt;code&amp;gt;production&amp;lt;/code&amp;gt; n&#039;affiche aucune information en cas d&#039;exception (vous devez alors vous reportez aux fichiers de log &amp;lt;code&amp;gt;./log/&amp;lt;environnement&amp;gt;.log&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
= Copyright =&lt;br /&gt;
Copyright &amp;amp;copy; 19/10/2006, GEDsismik&lt;br /&gt;
{{CC-BY-SA}}&lt;/div&gt;</summary>
		<author><name>Gedsismik</name></author>
	</entry>
	<entry>
		<id>https://lea-linux.org/docs/index.php?title=Ruby_On_Rails&amp;diff=13866</id>
		<title>Ruby On Rails</title>
		<link rel="alternate" type="text/html" href="https://lea-linux.org/docs/index.php?title=Ruby_On_Rails&amp;diff=13866"/>
		<updated>2006-10-19T19:41:07Z</updated>

		<summary type="html">&lt;p&gt;Gedsismik : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Développer sous Linux]]&lt;br /&gt;
= Ruby On Rails =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;leatitre&amp;quot;&amp;gt;Ruby On Rails&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;leapar&amp;quot;&amp;gt;par [mailto:gedsismik_at_free_point_fr GEDsismik]&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;leadesc&amp;quot;&amp;gt;Monter un projet Ruby On Rails (RoR) pas à pas.&amp;lt;/div&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Avant propos ==&lt;br /&gt;
&lt;br /&gt;
Ruby On Rails (RoR) est un framework web écrit en ruby. Ce document vous présente comment faire un petit projet Ruby On Rails.&lt;br /&gt;
&lt;br /&gt;
On supposera installé et correctement configuré :&lt;br /&gt;
 - un SGBD supporté par RoR (personnellement, j&#039;utilise MySQL)&lt;br /&gt;
 - Ruby&lt;br /&gt;
 - Rails et ses dépendances&lt;br /&gt;
&lt;br /&gt;
Il vous faudra aussi des notions de ruby.&lt;br /&gt;
&lt;br /&gt;
== Mise en place de l&#039;environnement ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;$ rails monsite&lt;br /&gt;
      create  &lt;br /&gt;
      create  app/controllers&lt;br /&gt;
      create  app/helpers&lt;br /&gt;
      create  app/models&lt;br /&gt;
      create  app/views/layouts&lt;br /&gt;
[...]&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
Le répertoire monsite vient d&#039;être créé ainsi que la structure initiale du projet. Entrez maintenant dans ce répertoire.&lt;br /&gt;
Normalement, il devrait contenir les fichiers et répertoires suivants : &lt;br /&gt;
&amp;lt;code&amp;gt;app&lt;br /&gt;
components&lt;br /&gt;
config&lt;br /&gt;
db&lt;br /&gt;
doc&lt;br /&gt;
lib&lt;br /&gt;
log&lt;br /&gt;
public&lt;br /&gt;
Rakefile&lt;br /&gt;
README&lt;br /&gt;
script&lt;br /&gt;
test&lt;br /&gt;
tmp&lt;br /&gt;
vendor&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Configuration ==&lt;br /&gt;
&lt;br /&gt;
Si vous n&#039;avez pas de base de donnée, créez-en :&lt;br /&gt;
&amp;lt;code&amp;gt;mysql&amp;gt; create database monsite_development;&lt;br /&gt;
mysql&amp;gt; create database monsite_test;&lt;br /&gt;
mysql&amp;gt; create database monsite_production;&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;aparte&amp;quot;&amp;gt;&lt;br /&gt;
Note : J&#039;en ai crée 3 pour pouvoir utiliser 3 environnements différents. Une seule peut suffir, ca dépend de ce que vous voulez faire.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous allons ensuite éditer ./config/database.yml. Vous avez 3 environnements de pré-configurées de la sorte : &lt;br /&gt;
&amp;lt;code&amp;gt;production:&lt;br /&gt;
  adapter: mysql&lt;br /&gt;
  database: monsite_production&lt;br /&gt;
  username: root&lt;br /&gt;
  password:&lt;br /&gt;
  host: localhost&amp;lt;/code&amp;gt;&lt;br /&gt;
Editez-le en fonction des paramètres de votre base de donnée&lt;br /&gt;
&amp;lt;code&amp;gt;production:&lt;br /&gt;
  adapter: mysql&lt;br /&gt;
  database: monsite_production&lt;br /&gt;
  username: gedsismik&lt;br /&gt;
  password: mypassord&lt;br /&gt;
  host: localhost&lt;br /&gt;
  socket: /var/run/mysql/mysql.sock&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;aparte&amp;quot;&amp;gt;&lt;br /&gt;
Note : Sous Slackware, j&#039;ai du ajouter la ligne &amp;lt;code&amp;gt;socket: /var/run/mysql/mysql.sock&amp;lt;/code&amp;gt; sinon il ne trouve pas la socket MySQL.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Modèle MVC ==&lt;br /&gt;
&lt;br /&gt;
Ruby On Rails utilise le motif de conception MVC (modèle-vue-contrôleur). Je m&#039;explique : dans un projet RoR, vous séparez :&lt;br /&gt;
 - les modèles (répertoire &amp;lt;code&amp;gt;./app/models&amp;lt;/code&amp;gt;) : ce qui concerne les données. Dans notre cas, c&#039;est donc principalement les tables des bases de données.&lt;br /&gt;
 - les vues (répertoire &amp;lt;code&amp;gt;./app/views&amp;lt;/code&amp;gt;) : ce qui concerne l&#039;interface. Dans notre cas, il s&#039;agit de la présentation des pages (en HTML et Ruby embarqué, nous verrons ça plus tard).&lt;br /&gt;
 - les contrôleurs (répertoire &amp;lt;code&amp;gt;./app/controllers&amp;lt;/code&amp;gt;) : concerne la gestion des évenements. Dans notre cas, ce sont les classes qui feront le lien entre les tables (models) et le html (views). Ce qui revient aux appels aux tables via les modèles et la création de variables dont le contenu sera affiché dans les vues.&lt;br /&gt;
&lt;br /&gt;
Pour palier à certaines fonctions qui ne peuvent pas suivre le modèle MVC à la lettre, Rails dispose d&#039;une partie appelée helpers (&amp;lt;code&amp;gt;./app/helpers&amp;lt;/code&amp;gt;) qui contient des classes accessibles aux vues et qui contient du code ayant accès aux modèles sans passer par les contrôleurs.&lt;br /&gt;
&lt;br /&gt;
== Création des modèles ==&lt;br /&gt;
&lt;br /&gt;
=== Génération des fichiers relatifs à la table ===&lt;br /&gt;
&lt;br /&gt;
On va utilisez le script &amp;lt;code&amp;gt;./script/generate&amp;lt;/code&amp;gt; pour générer la première table.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;$ ./script/generate model livre&lt;br /&gt;
      exists  app/models/&lt;br /&gt;
      exists  test/unit/&lt;br /&gt;
      exists  test/fixtures/&lt;br /&gt;
      create  app/models/livre.rb&lt;br /&gt;
      create  test/unit/livre_test.rb&lt;br /&gt;
      create  test/fixtures/livres.yml&lt;br /&gt;
      create  db/migrate&lt;br /&gt;
      create  db/migrate/001_create_livres.rb&lt;br /&gt;
$ ./script/generate model auteur&lt;br /&gt;
      exists  app/models/&lt;br /&gt;
      exists  test/unit/&lt;br /&gt;
      exists  test/fixtures/&lt;br /&gt;
      create  app/models/auteur.rb&lt;br /&gt;
      create  test/unit/auteur_test.rb&lt;br /&gt;
      create  test/fixtures/auteurs.yml&lt;br /&gt;
      exists  db/migrate&lt;br /&gt;
      create  db/migrate/002_create_auteurs.rb&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Fichiers de migration ===&lt;br /&gt;
&lt;br /&gt;
Les fichiers de migration/création de table se trouvent dans &amp;lt;code&amp;gt;./db/migrate&amp;lt;/code&amp;gt;. Il va falloir les éditez pour ajoutez les champs que vous voulez.&lt;br /&gt;
&amp;lt;div class=&amp;quot;aparte&amp;quot;&amp;gt;&lt;br /&gt;
Note : ne faites pas de champ &amp;quot;id&amp;quot;, ils sont automatiquement créés et gérer par Rails.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Fichier ./db/migrate/001_create_livres.rb ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;class CreateLivres &amp;lt; ActiveRecord::Migration&lt;br /&gt;
	def self.up&lt;br /&gt;
		create_table :livres do |t|&lt;br /&gt;
			t.column :titre, :string, :null =&amp;gt; false&lt;br /&gt;
			t.column :auteur_id, :integer, :null =&amp;gt; false&lt;br /&gt;
			t.column :quantite, :integer, :default =&amp;gt; &amp;quot;1&amp;quot;&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	def self.down&lt;br /&gt;
		drop_table :livres&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Fichier ./db/migrate/002_create_auteurs.rb ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;class CreateAuteurs &amp;lt; ActiveRecord::Migration&lt;br /&gt;
	def self.up&lt;br /&gt;
		create_table :auteurs do |t|&lt;br /&gt;
			t.column :nom, :string&lt;br /&gt;
			t.column :prenom, :string&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	def self.down&lt;br /&gt;
		drop_table :auteurs&lt;br /&gt;
	end&lt;br /&gt;
end&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;aparte&amp;quot;&amp;gt;Notez que vous pouvez réunir les deux fichiers en un seul :&lt;br /&gt;
./db/migrate/001_initial.rb&lt;br /&gt;
&amp;lt;code&amp;gt;class Initial &amp;lt; ActiveRecord::Migration&lt;br /&gt;
	def self.up&lt;br /&gt;
		create_table :livres do |t|&lt;br /&gt;
			t.column :titre, :string, :null =&amp;gt; false&lt;br /&gt;
			t.column :auteur_id, :integer, :null =&amp;gt; false&lt;br /&gt;
			t.column :quantite, :integer, :default =&amp;gt; &amp;quot;1&amp;quot;&lt;br /&gt;
		end&lt;br /&gt;
		create_table :auteurs do |t|&lt;br /&gt;
			t.column :nom, :string, :null =&amp;gt; false&lt;br /&gt;
			t.column :prenom, :string&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	def self.down&lt;br /&gt;
		drop_table :livres&lt;br /&gt;
		drop_table :auteurs&lt;br /&gt;
	end&lt;br /&gt;
end&amp;lt;/code&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Génération des tables ===&lt;br /&gt;
&lt;br /&gt;
Toujours dans le repertoire monsite, exécutez &amp;lt;code&amp;gt;rake migrate&amp;lt;/code&amp;gt;.&lt;br /&gt;
&amp;lt;code&amp;gt;$ rake migrate&lt;br /&gt;
(in /home/gedsismik/monsite)&lt;br /&gt;
== CreateLivres: migrating ====================================================&lt;br /&gt;
-- create_table(:livres)&lt;br /&gt;
   -&amp;gt; 0.0441s&lt;br /&gt;
== CreateLivres: migrated (0.0442s) ===========================================&lt;br /&gt;
&lt;br /&gt;
== CreateAuteurs: migrating ===================================================&lt;br /&gt;
-- create_table(:auteurs)&lt;br /&gt;
   -&amp;gt; 0.0457s&lt;br /&gt;
== CreateAuteurs: migrated (0.0458s) ==========================================&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Si vous regardez dans votre base de donnée, vous trouverez donc 3 tables :&lt;br /&gt;
 - auteurs&lt;br /&gt;
 - livres&lt;br /&gt;
 - schema_info&lt;br /&gt;
&lt;br /&gt;
Cette dernière table contient en fait la version de la base de donnée. Les versions sont incrémentées lors du &amp;lt;code&amp;gt;./script/generate model &amp;lt;nom table&amp;gt;&amp;lt;/code&amp;gt; et sont contenus dans le nom du fichier &amp;lt;code&amp;gt;./db/migrate/001_initial.rb&amp;lt;/code&amp;gt; est donc la version 1 de la base.&lt;br /&gt;
&lt;br /&gt;
=== Edition des modèles ===&lt;br /&gt;
Intéressons-nous aux fichiers &amp;lt;code&amp;gt;./app/models/auteur.rb&amp;lt;/code&amp;gt; et &amp;lt;code&amp;gt;./app/models/livre.rb&amp;lt;/code&amp;gt;. Ces classes héritant de ActiveRecord::Base, presque tout est déjà fait. Nous allons juste ajouter la relation : &amp;quot;un auteur écrit plusieurs livres&amp;quot;. Cette relation se traduit dans &amp;lt;code&amp;gt;./app/models/auteur.rb&amp;lt;/code&amp;gt; par :&lt;br /&gt;
&amp;lt;code&amp;gt;class Auteur &amp;lt; ActiveRecord::Base&lt;br /&gt;
	has_many :livre&lt;br /&gt;
end&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En contrepartie, on peut avoir besoin d&#039;accéder à l&#039;auteur d&#039;un livre. Modifions donc &amp;lt;code&amp;gt;./app/models/livre.rb&amp;lt;/code&amp;gt; en :&lt;br /&gt;
&amp;lt;code&amp;gt;class Livre &amp;lt; ActiveRecord::Base&lt;br /&gt;
	belongs_to :auteur&lt;br /&gt;
end&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Et voilà ! Ca devrait suffir pour les modèles. En effet, Rails fera tout seul le lien entre les deux tables grâce à auteur_id.&lt;br /&gt;
&lt;br /&gt;
== Création d&#039;un contrôleur ==&lt;br /&gt;
Tout d&#039;abord, utilisons, comme pour les modèles, le script &amp;lt;code&amp;gt;./script/generate&amp;lt;/code&amp;gt; :&lt;br /&gt;
&amp;lt;code&amp;gt;$ ./script/generate controller bibliotheque&lt;br /&gt;
      exists  app/controllers/&lt;br /&gt;
      exists  app/helpers/&lt;br /&gt;
      create  app/views/bibliotheque&lt;br /&gt;
      exists  test/functional/&lt;br /&gt;
      create  app/controllers/bibliotheque_controller.rb&lt;br /&gt;
      create  test/functional/bibliotheque_controller_test.rb&lt;br /&gt;
      create  app/helpers/bibliotheque_helper.rb&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Editons maintenant &amp;lt;code&amp;gt;./app/controllers/bibliotheque_controller.rb&amp;lt;/code&amp;gt;. Par défaut, vous avez :&lt;br /&gt;
&amp;lt;code&amp;gt;class BibliothequeController &amp;lt; ApplicationController&lt;br /&gt;
end&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous allons créer des actions. Un contrôleur peut comporter plusieurs actions.&lt;br /&gt;
&amp;lt;code&amp;gt;class BibliothequeController &amp;lt; ApplicationController&lt;br /&gt;
	def index&lt;br /&gt;
		listeAuteur&lt;br /&gt;
		render_action &#039;listeAuteur&#039;&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	def listeAuteur&lt;br /&gt;
		@auteurs = Auteur.find(:all, :order =&amp;gt; &amp;quot;nom,prenom&amp;quot;)&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	def ajoutAuteur&lt;br /&gt;
		param = @params[&#039;auteur&#039;]&lt;br /&gt;
		auteur = Auteur.new(param)&lt;br /&gt;
		if auteur.save&lt;br /&gt;
			flash[:ok] = &amp;quot;L&#039;auteur a &amp;amp;eacute;t&amp;amp;eacute; ajout&amp;amp;eacute;&amp;quot;&lt;br /&gt;
		else&lt;br /&gt;
			flash[:error] = &amp;quot;Probl&amp;amp;egrave;me à l&#039;ajout de l&#039;auteur&amp;quot;&lt;br /&gt;
		end&lt;br /&gt;
		# ajoutAuteur n&#039;a pas besoin de vue. Une fois l&#039;auteur ajouté&lt;br /&gt;
		# on réaffiche la liste &lt;br /&gt;
		redirect_to :action =&amp;gt; &#039;listeAuteur&#039;&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
L&#039;action index est l&#039;action par défaut. L&#039;action listeAuteur donnera la liste des auteurs. On constate ici qu&#039;on peut largement se passer d&#039;écrire du SQL dans Rails. @auteurs est une variable qui contiendra tous les auteurs.&lt;br /&gt;
&lt;br /&gt;
== Mise en place des vues ==&lt;br /&gt;
&lt;br /&gt;
=== Le layout ===&lt;br /&gt;
&lt;br /&gt;
Tout d&#039;abord, créons une layout. Le layout est la structure commune à toutes les pages. Ils se trouvent dans &amp;lt;code&amp;gt;./app/views/layouts/&amp;lt;/code&amp;gt;.&lt;br /&gt;
&amp;lt;code&amp;gt;$ touch app/views/layouts/bibliotheque.rhtml&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
Editons maintenant ce fichier :&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;!DOCTYPE HTML PUBLIC &amp;quot;-//W3C//DTD HTML 4.0 Transitional//FR&amp;quot; &amp;quot;http://www.w3.org/TR/html4/loose.dtd&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
&amp;lt;head&amp;gt;&lt;br /&gt;
        &amp;lt;title&amp;gt;Biblioth&amp;amp;egrave;que - &amp;lt;%= controller.action_name %&amp;gt;&amp;lt;/title&amp;gt;&lt;br /&gt;
        &amp;lt;meta name=&amp;quot;author&amp;quot; content=&amp;quot;GEDsismik&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;meta http-equiv=&amp;quot;Content-Type&amp;quot; content=&amp;quot;text/html; charset=iso-8859-15&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/head&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
        &amp;lt;h1&amp;gt;Biblioth&amp;amp;egrave;que&amp;lt;/h1&amp;gt;&lt;br /&gt;
        &amp;lt;br/&amp;gt;&lt;br /&gt;
        &amp;lt;div class=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;p style=&amp;quot;color: green&amp;quot;&amp;gt;&amp;lt;%= flash[:notice] %&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
        &amp;lt;%= @content_for_layout %&amp;gt;&lt;br /&gt;
        &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
C&#039;est du Ruby embarqué dans du HTML. Pour ceux qui connaissent, c&#039;est un peu le même principe que le PHP. On écrit du HTML et aux endroits où on veut mettre du ruby, on place le code dans une balise &amp;lt;code&amp;gt;&amp;lt;% #code %&amp;gt;&amp;lt;/code&amp;gt;. Si on veut afficher la sortie du code, on place le code dans une balise &amp;lt;code&amp;gt;&amp;lt;%= #code %&amp;gt;&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;%= @content_for_layout %&amp;gt;&amp;lt;/code&amp;gt; affichera la partie propre à l&#039;action.&lt;br /&gt;
&lt;br /&gt;
=== La vue ===&lt;br /&gt;
&lt;br /&gt;
Les vues sont dans un répertoire de la forme &amp;lt;code&amp;gt;./app/views/&amp;lt;contrôleur&amp;gt;/&amp;lt;/code&amp;gt; et porte le nom &amp;lt;code&amp;gt;&amp;lt;action&amp;gt;.rhtml&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Créons donc le fichier &amp;lt;code&amp;gt;./app/views/bibliotheque/listeAuteur.rhtml&amp;lt;/code&amp;gt; :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;h2&amp;gt;Liste des auteurs&amp;lt;/h2&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;%&lt;br /&gt;
	@auteurs.each do |auteur|&lt;br /&gt;
		%&amp;gt;&amp;lt;li&amp;gt;&amp;lt;%= auteur.nom + &amp;quot; &amp;quot; + auteur.prenom %&amp;gt;&amp;lt;/li&amp;gt;&amp;lt;%&lt;br /&gt;
	end&lt;br /&gt;
%&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h2&amp;gt;Ajout d&#039;un auteur&amp;lt;/h2&amp;gt;&lt;br /&gt;
&amp;lt;%= start_form_tag :action =&amp;gt; &amp;quot;ajoutAuteur&amp;quot; %&amp;gt;&lt;br /&gt;
	&amp;lt;p&amp;gt;&amp;lt;label&amp;gt;Pr&amp;amp;eacute;nom : &amp;lt;%= text_field &#039;auteur&#039;, &#039;prenom&#039; %&amp;gt;&amp;lt;/label&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
	&amp;lt;p&amp;gt;&amp;lt;label&amp;gt;Nom : &amp;lt;%= text_field &#039;auteur&#039;, &#039;nom&#039; %&amp;gt;&amp;lt;/label&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
	&amp;lt;%= submit_tag(&amp;quot;Ajouter&amp;quot;) %&amp;gt;&lt;br /&gt;
&amp;lt;%= end_form_tag %&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== WebRick ==&lt;br /&gt;
&lt;br /&gt;
Vous disposez d&#039;un serveur de test appellé WebRick. Pour le lancez, tapez &amp;lt;code&amp;gt;./script/server &amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;$ ./script/server &lt;br /&gt;
=&amp;gt; Booting WEBrick...&lt;br /&gt;
=&amp;gt; Rails application started on http://0.0.0.0:3000&lt;br /&gt;
=&amp;gt; Ctrl-C to shutdown server; call with --help for options&lt;br /&gt;
[2006-10-19 18:32:57] INFO  WEBrick 1.3.1&lt;br /&gt;
[2006-10-19 18:32:57] INFO  ruby 1.8.5 (2006-08-25) [i686-linux]&lt;br /&gt;
[2006-10-19 18:32:57] INFO  WEBrick::HTTPServer#start: pid=26166 port=3000&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Par défaut, ce serveur écoute le port 3000. Ouvrez donc un navigateur et tapez : &amp;lt;code&amp;gt;http://localhost:3000&amp;lt;/code&amp;gt;.&lt;br /&gt;
Normalement, vous devriez obtenir une page de test. Les url de Rails par défaut se décompose de la sorte &amp;lt;code&amp;gt;http://localhost:3000/&amp;lt;contrôleur&amp;gt;/&amp;lt;action&amp;gt;[/&amp;lt;parametres&amp;gt;]&amp;lt;/code&amp;gt;. Tapez donc dans votre navigateur &amp;lt;code&amp;gt;http://localhost:3000/bibliotheque/listeAuteur&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Pour aller un peu plus loin ==&lt;br /&gt;
Ajoutons le support des livres dans &amp;lt;code&amp;gt;./app/controllers/bibliotheque_controller.rb&amp;lt;/code&amp;gt; :&lt;br /&gt;
&amp;lt;code&amp;gt;class BibliothequeController &amp;lt; ApplicationController&lt;br /&gt;
	def index&lt;br /&gt;
		listeLivre&lt;br /&gt;
		render_action &#039;listeLivre&#039;&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	def listeAuteur&lt;br /&gt;
		@auteurs = Auteur.find(:all, :order =&amp;gt; &amp;quot;nom,prenom&amp;quot;)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	def listeLivre&lt;br /&gt;
		@livres = Livre.find(:all, :order =&amp;gt; &amp;quot;titre&amp;quot;)&lt;br /&gt;
		@auteurs = Auteur.find(:all, :order =&amp;gt; &amp;quot;nom,prenom&amp;quot;).map{ |u| [ u.nom + &amp;quot; (&amp;quot; + u.prenom + &amp;quot;)&amp;quot;, u.id] }&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	def ajoutAuteur&lt;br /&gt;
		param = @params[&#039;auteur&#039;]&lt;br /&gt;
		auteur = Auteur.new(param)&lt;br /&gt;
		if auteur.save&lt;br /&gt;
			flash[:ok] = &amp;quot;L&#039;auteur a &amp;amp;eacute;t&amp;amp;eacute; ajout&amp;amp;eacute;&amp;quot;&lt;br /&gt;
		else&lt;br /&gt;
			flash[:error] = &amp;quot;Probl&amp;amp;egrave;me à l&#039;ajout de l&#039;auteur&amp;quot;&lt;br /&gt;
		end&lt;br /&gt;
		redirect_to :action =&amp;gt; &#039;listeAuteur&#039;&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	def ajoutLivre&lt;br /&gt;
		param = @params[&#039;livre&#039;]&lt;br /&gt;
		livre = Livre.new(param)&lt;br /&gt;
		if livre.save&lt;br /&gt;
			flash[:ok] = &amp;quot;Le livre a &amp;amp;eacute;t&amp;amp;eacute; ajout&amp;amp;eacute;&amp;quot;&lt;br /&gt;
		else&lt;br /&gt;
			flash[:error] = &amp;quot;Probl&amp;amp;egrave;me à l&#039;ajout du livre&amp;quot;&lt;br /&gt;
		end&lt;br /&gt;
		redirect_to :action =&amp;gt; &#039;listeLivre&#039;&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Créons du même coup la vue correspondante à listeLivre &amp;lt;code&amp;gt;./app/views/bibliotheque/listeLivre.rhtml&amp;lt;/code&amp;gt; :&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;% if @livres.blank? %&amp;gt;&lt;br /&gt;
	&amp;lt;h2&amp;gt;Liste des ouvrages&amp;lt;/h2&amp;gt;&lt;br /&gt;
	&amp;lt;ul&amp;gt;&lt;br /&gt;
	&amp;lt;%&lt;br /&gt;
		@livres.each do |livre|&lt;br /&gt;
			%&amp;gt;&amp;lt;li&amp;gt;&amp;lt;%= livre.titre %&amp;gt; - &amp;lt;%= livre.auteur.prenom + &amp;quot; &amp;quot; + livre.auteur.nom %&amp;gt;&amp;lt;/li&amp;gt;&amp;lt;%&lt;br /&gt;
		end&lt;br /&gt;
	%&amp;gt;&lt;br /&gt;
	&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;% else %&amp;gt;&lt;br /&gt;
	&amp;lt;i&amp;gt;La bibliothèque ne contient aucun livre.&amp;lt;/i&amp;gt;&lt;br /&gt;
&amp;lt;% end %&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;% unless @auteurs.blank? %&amp;gt;&lt;br /&gt;
	&amp;lt;h2&amp;gt;Ajout d&#039;un livre&amp;lt;/h2&amp;gt;&lt;br /&gt;
	&amp;lt;%= start_form_tag :action =&amp;gt; &amp;quot;ajoutLivre&amp;quot; %&amp;gt;&lt;br /&gt;
		&amp;lt;p&amp;gt;&amp;lt;label&amp;gt;Titre : &amp;lt;%= text_field &#039;livre&#039;, &#039;titre&#039; %&amp;gt;&amp;lt;/label&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
		&amp;lt;p&amp;gt;&amp;lt;label&amp;gt;Nombre d&#039;exemplaire : &amp;lt;%= text_field &#039;livre&#039;, &#039;quantite&#039; %&amp;gt;&amp;lt;/label&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
		&amp;lt;p&amp;gt;&amp;lt;label&amp;gt;Auteur : &amp;lt;%= select(&#039;livre&#039;, &#039;auteur_id&#039;, @auteurs) %&amp;gt;&amp;lt;/label&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
		&amp;lt;%= submit_tag(&amp;quot;Ajouter&amp;quot;) %&amp;gt;&lt;br /&gt;
	&amp;lt;%= end_form_tag %&amp;gt;&lt;br /&gt;
&amp;lt;% end %&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Les environnements ==&lt;br /&gt;
Pour utiliser les différents environnements, vous devez manipuler la variable &amp;lt;code&amp;gt;RAILS_ENV&amp;lt;/code&amp;gt;. Par défaut, vous êtes dans le premier environnement du fichier &amp;lt;code&amp;gt;./config/database.yml&amp;lt;/code&amp;gt; (à savoir en général development). Pour un &amp;lt;code&amp;gt;rake migrate&amp;lt;/code&amp;gt; en production par exemple :&lt;br /&gt;
&amp;lt;code&amp;gt;RAILS_ENV=production rake migrate&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
notez que l&#039;environnement &amp;lt;code&amp;gt;test&amp;lt;/code&amp;gt; efface les tables à chaque &amp;lt;code&amp;gt;rake&amp;lt;/code&amp;gt; et que l&#039;environnement &amp;lt;code&amp;gt;production&amp;lt;/code&amp;gt; n&#039;affiche aucune information en cas d&#039;exception (vous devez alors vous reportez aux fichiers de log &amp;lt;code&amp;gt;./log/&amp;lt;environnement&amp;gt;.log&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
= Copyright =&lt;br /&gt;
Copyright &amp;amp;copy; 19/10/2006, GEDsismik&lt;br /&gt;
{{CC-BY-SA}}&lt;/div&gt;</summary>
		<author><name>Gedsismik</name></author>
	</entry>
	<entry>
		<id>https://lea-linux.org/docs/index.php?title=Mod%C3%A8le:Copy&amp;diff=13865</id>
		<title>Modèle:Copy</title>
		<link rel="alternate" type="text/html" href="https://lea-linux.org/docs/index.php?title=Mod%C3%A8le:Copy&amp;diff=13865"/>
		<updated>2006-10-19T19:40:27Z</updated>

		<summary type="html">&lt;p&gt;Gedsismik : /* Copyright */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Copyright =&lt;br /&gt;
Copyright &amp;amp;copy; 2006, GEDsismik&lt;br /&gt;
{{CC-BY-SA}}&lt;/div&gt;</summary>
		<author><name>Gedsismik</name></author>
	</entry>
	<entry>
		<id>https://lea-linux.org/docs/index.php?title=Ruby_On_Rails&amp;diff=13861</id>
		<title>Ruby On Rails</title>
		<link rel="alternate" type="text/html" href="https://lea-linux.org/docs/index.php?title=Ruby_On_Rails&amp;diff=13861"/>
		<updated>2006-10-19T19:22:04Z</updated>

		<summary type="html">&lt;p&gt;Gedsismik : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Développer sous Linux]]&lt;br /&gt;
= Ruby On Rails =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;leatitre&amp;quot;&amp;gt;Ruby On Rails&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;leapar&amp;quot;&amp;gt;par [mailto:gedsismik_at_free_point_fr GEDsismik]&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;leadesc&amp;quot;&amp;gt;Monter un projet Ruby On Rails (RoR) pas à pas.&amp;lt;/div&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Avant propos ==&lt;br /&gt;
&lt;br /&gt;
Ruby On Rails (RoR) est un framework web écrit en ruby. Ce document vous présente comment faire un petit projet Ruby On Rails.&lt;br /&gt;
&lt;br /&gt;
On supposera installé et correctement configuré :&lt;br /&gt;
 - un SGBD supporté par RoR (personnellement, j&#039;utilise MySQL)&lt;br /&gt;
 - Ruby&lt;br /&gt;
 - Rails et ses dépendances&lt;br /&gt;
&lt;br /&gt;
Il vous faudra aussi des notions de ruby.&lt;br /&gt;
&lt;br /&gt;
== Mise en place de l&#039;environnement ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;$ rails monsite&lt;br /&gt;
      create  &lt;br /&gt;
      create  app/controllers&lt;br /&gt;
      create  app/helpers&lt;br /&gt;
      create  app/models&lt;br /&gt;
      create  app/views/layouts&lt;br /&gt;
[...]&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
Le répertoire monsite vient d&#039;être créé ainsi que la structure initiale du projet. Entrez maintenant dans ce répertoire.&lt;br /&gt;
Normalement, il devrait contenir les fichiers et répertoires suivants : &lt;br /&gt;
&amp;lt;code&amp;gt;app&lt;br /&gt;
components&lt;br /&gt;
config&lt;br /&gt;
db&lt;br /&gt;
doc&lt;br /&gt;
lib&lt;br /&gt;
log&lt;br /&gt;
public&lt;br /&gt;
Rakefile&lt;br /&gt;
README&lt;br /&gt;
script&lt;br /&gt;
test&lt;br /&gt;
tmp&lt;br /&gt;
vendor&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Configuration ==&lt;br /&gt;
&lt;br /&gt;
Si vous n&#039;avez pas de base de donnée, créez-en :&lt;br /&gt;
&amp;lt;code&amp;gt;mysql&amp;gt; create database monsite_development;&lt;br /&gt;
mysql&amp;gt; create database monsite_test;&lt;br /&gt;
mysql&amp;gt; create database monsite_production;&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;aparte&amp;quot;&amp;gt;&lt;br /&gt;
Note : J&#039;en ai crée 3 pour pouvoir utiliser 3 environnements différents. Une seule peut suffir, ca dépend de ce que vous voulez faire.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous allons ensuite éditer ./config/database.yml. Vous avez 3 environnements de pré-configurées de la sorte : &lt;br /&gt;
&amp;lt;code&amp;gt;production:&lt;br /&gt;
  adapter: mysql&lt;br /&gt;
  database: monsite_production&lt;br /&gt;
  username: root&lt;br /&gt;
  password:&lt;br /&gt;
  host: localhost&amp;lt;/code&amp;gt;&lt;br /&gt;
Editez-le en fonction des paramètres de votre base de donnée&lt;br /&gt;
&amp;lt;code&amp;gt;production:&lt;br /&gt;
  adapter: mysql&lt;br /&gt;
  database: monsite_production&lt;br /&gt;
  username: gedsismik&lt;br /&gt;
  password: mypassord&lt;br /&gt;
  host: localhost&lt;br /&gt;
  socket: /var/run/mysql/mysql.sock&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;aparte&amp;quot;&amp;gt;&lt;br /&gt;
Note : Sous Slackware, j&#039;ai du ajouter la ligne &amp;lt;code&amp;gt;socket: /var/run/mysql/mysql.sock&amp;lt;/code&amp;gt; sinon il ne trouve pas la socket MySQL.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Modèle MVC ==&lt;br /&gt;
&lt;br /&gt;
Ruby On Rails utilise le motif de conception MVC (modèle-vue-contrôleur). Je m&#039;explique : dans un projet RoR, vous séparez :&lt;br /&gt;
 - les modèles (répertoire &amp;lt;code&amp;gt;./app/models&amp;lt;/code&amp;gt;) : ce qui concerne les données. Dans notre cas, c&#039;est donc principalement les tables des bases de données.&lt;br /&gt;
 - les vues (répertoire &amp;lt;code&amp;gt;./app/views&amp;lt;/code&amp;gt;) : ce qui concerne l&#039;interface. Dans notre cas, il s&#039;agit de la présentation des pages (en HTML et Ruby embarqué, nous verrons ça plus tard).&lt;br /&gt;
 - les contrôleurs (répertoire &amp;lt;code&amp;gt;./app/controllers&amp;lt;/code&amp;gt;) : concerne la gestion des évenements. Dans notre cas, ce sont les classes qui feront le lien entre les tables (models) et le html (views). Ce qui revient aux appels aux tables via les modèles et la création de variables dont le contenu sera affiché dans les vues.&lt;br /&gt;
&lt;br /&gt;
Pour palier à certaines fonctions qui ne peuvent pas suivre le modèle MVC à la lettre, Rails dispose d&#039;une partie appelée helpers (&amp;lt;code&amp;gt;./app/helpers&amp;lt;/code&amp;gt;) qui contient des classes accessibles aux vues et qui contient du code ayant accès aux modèles sans passer par les contrôleurs.&lt;br /&gt;
&lt;br /&gt;
== Création des modèles ==&lt;br /&gt;
&lt;br /&gt;
=== Génération des fichiers relatifs à la table ===&lt;br /&gt;
&lt;br /&gt;
On va utilisez le script &amp;lt;code&amp;gt;./script/generate&amp;lt;/code&amp;gt; pour générer la première table.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;$ ./script/generate model livre&lt;br /&gt;
      exists  app/models/&lt;br /&gt;
      exists  test/unit/&lt;br /&gt;
      exists  test/fixtures/&lt;br /&gt;
      create  app/models/livre.rb&lt;br /&gt;
      create  test/unit/livre_test.rb&lt;br /&gt;
      create  test/fixtures/livres.yml&lt;br /&gt;
      create  db/migrate&lt;br /&gt;
      create  db/migrate/001_create_livres.rb&lt;br /&gt;
$ ./script/generate model auteur&lt;br /&gt;
      exists  app/models/&lt;br /&gt;
      exists  test/unit/&lt;br /&gt;
      exists  test/fixtures/&lt;br /&gt;
      create  app/models/auteur.rb&lt;br /&gt;
      create  test/unit/auteur_test.rb&lt;br /&gt;
      create  test/fixtures/auteurs.yml&lt;br /&gt;
      exists  db/migrate&lt;br /&gt;
      create  db/migrate/002_create_auteurs.rb&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Fichiers de migration ===&lt;br /&gt;
&lt;br /&gt;
Les fichiers de migration/création de table se trouvent dans &amp;lt;code&amp;gt;./db/migrate&amp;lt;/code&amp;gt;. Il va falloir les éditez pour ajoutez les champs que vous voulez.&lt;br /&gt;
&amp;lt;div class=&amp;quot;aparte&amp;quot;&amp;gt;&lt;br /&gt;
Note : ne faites pas de champ &amp;quot;id&amp;quot;, ils sont automatiquement créés et gérer par Rails.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Fichier ./db/migrate/001_create_livres.rb ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;class CreateLivres &amp;lt; ActiveRecord::Migration&lt;br /&gt;
	def self.up&lt;br /&gt;
		create_table :livres do |t|&lt;br /&gt;
			t.column :titre, :string, :null =&amp;gt; false&lt;br /&gt;
			t.column :auteur_id, :integer, :null =&amp;gt; false&lt;br /&gt;
			t.column :quantite, :integer, :default =&amp;gt; &amp;quot;1&amp;quot;&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	def self.down&lt;br /&gt;
		drop_table :livres&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Fichier ./db/migrate/002_create_auteurs.rb ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;class CreateAuteurs &amp;lt; ActiveRecord::Migration&lt;br /&gt;
	def self.up&lt;br /&gt;
		create_table :auteurs do |t|&lt;br /&gt;
			t.column :nom, :string&lt;br /&gt;
			t.column :prenom, :string&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	def self.down&lt;br /&gt;
		drop_table :auteurs&lt;br /&gt;
	end&lt;br /&gt;
end&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;aparte&amp;quot;&amp;gt;Notez que vous pouvez réunir les deux fichiers en un seul :&lt;br /&gt;
./db/migrate/001_initial.rb&lt;br /&gt;
&amp;lt;code&amp;gt;class Initial &amp;lt; ActiveRecord::Migration&lt;br /&gt;
	def self.up&lt;br /&gt;
		create_table :livres do |t|&lt;br /&gt;
			t.column :titre, :string, :null =&amp;gt; false&lt;br /&gt;
			t.column :auteur_id, :integer, :null =&amp;gt; false&lt;br /&gt;
			t.column :quantite, :integer, :default =&amp;gt; &amp;quot;1&amp;quot;&lt;br /&gt;
		end&lt;br /&gt;
		create_table :auteurs do |t|&lt;br /&gt;
			t.column :nom, :string, :null =&amp;gt; false&lt;br /&gt;
			t.column :prenom, :string&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	def self.down&lt;br /&gt;
		drop_table :livres&lt;br /&gt;
		drop_table :auteurs&lt;br /&gt;
	end&lt;br /&gt;
end&amp;lt;/code&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Génération des tables ===&lt;br /&gt;
&lt;br /&gt;
Toujours dans le repertoire monsite, exécutez &amp;lt;code&amp;gt;rake migrate&amp;lt;/code&amp;gt;.&lt;br /&gt;
&amp;lt;code&amp;gt;$ rake migrate&lt;br /&gt;
(in /home/gedsismik/monsite)&lt;br /&gt;
== CreateLivres: migrating ====================================================&lt;br /&gt;
-- create_table(:livres)&lt;br /&gt;
   -&amp;gt; 0.0441s&lt;br /&gt;
== CreateLivres: migrated (0.0442s) ===========================================&lt;br /&gt;
&lt;br /&gt;
== CreateAuteurs: migrating ===================================================&lt;br /&gt;
-- create_table(:auteurs)&lt;br /&gt;
   -&amp;gt; 0.0457s&lt;br /&gt;
== CreateAuteurs: migrated (0.0458s) ==========================================&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Si vous regardez dans votre base de donnée, vous trouverez donc 3 tables :&lt;br /&gt;
 - auteurs&lt;br /&gt;
 - livres&lt;br /&gt;
 - schema_info&lt;br /&gt;
&lt;br /&gt;
Cette dernière table contient en fait la version de la base de donnée. Les versions sont incrémentées lors du &amp;lt;code&amp;gt;./script/generate model &amp;lt;nom table&amp;gt;&amp;lt;/code&amp;gt; et sont contenus dans le nom du fichier &amp;lt;code&amp;gt;./db/migrate/001_initial.rb&amp;lt;/code&amp;gt; est donc la version 1 de la base.&lt;br /&gt;
&lt;br /&gt;
=== Edition des modèles ===&lt;br /&gt;
Intéressons-nous aux fichiers &amp;lt;code&amp;gt;./app/models/auteur.rb&amp;lt;/code&amp;gt; et &amp;lt;code&amp;gt;./app/models/livre.rb&amp;lt;/code&amp;gt;. Ces classes héritant de ActiveRecord::Base, presque tout est déjà fait. Nous allons juste ajouter la relation : &amp;quot;un auteur écrit plusieurs livres&amp;quot;. Cette relation se traduit dans &amp;lt;code&amp;gt;./app/models/auteur.rb&amp;lt;/code&amp;gt; par :&lt;br /&gt;
&amp;lt;code&amp;gt;class Auteur &amp;lt; ActiveRecord::Base&lt;br /&gt;
	has_many :livre&lt;br /&gt;
end&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En contrepartie, on peut avoir besoin d&#039;accéder à l&#039;auteur d&#039;un livre. Modifions donc &amp;lt;code&amp;gt;./app/models/livre.rb&amp;lt;/code&amp;gt; en :&lt;br /&gt;
&amp;lt;code&amp;gt;class Livre &amp;lt; ActiveRecord::Base&lt;br /&gt;
	belongs_to :auteur&lt;br /&gt;
end&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Et voilà ! Ca devrait suffir pour les modèles. En effet, Rails fera tout seul le lien entre les deux tables grâce à auteur_id.&lt;br /&gt;
&lt;br /&gt;
== Création d&#039;un contrôleur ==&lt;br /&gt;
Tout d&#039;abord, utilisons, comme pour les modèles, le script &amp;lt;code&amp;gt;./script/generate&amp;lt;/code&amp;gt; :&lt;br /&gt;
&amp;lt;code&amp;gt;$ ./script/generate controller bibliotheque&lt;br /&gt;
      exists  app/controllers/&lt;br /&gt;
      exists  app/helpers/&lt;br /&gt;
      create  app/views/bibliotheque&lt;br /&gt;
      exists  test/functional/&lt;br /&gt;
      create  app/controllers/bibliotheque_controller.rb&lt;br /&gt;
      create  test/functional/bibliotheque_controller_test.rb&lt;br /&gt;
      create  app/helpers/bibliotheque_helper.rb&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Editons maintenant &amp;lt;code&amp;gt;./app/controllers/bibliotheque_controller.rb&amp;lt;/code&amp;gt;. Par défaut, vous avez :&lt;br /&gt;
&amp;lt;code&amp;gt;class BibliothequeController &amp;lt; ApplicationController&lt;br /&gt;
end&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous allons créer des actions. Un contrôleur peut comporter plusieurs actions.&lt;br /&gt;
&amp;lt;code&amp;gt;class BibliothequeController &amp;lt; ApplicationController&lt;br /&gt;
	def index&lt;br /&gt;
		listeAuteur&lt;br /&gt;
		render_action &#039;listeAuteur&#039;&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	def listeAuteur&lt;br /&gt;
		@auteurs = Auteur.find(:all, :order =&amp;gt; &amp;quot;nom,prenom&amp;quot;)&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	def ajoutAuteur&lt;br /&gt;
		param = @params[&#039;auteur&#039;]&lt;br /&gt;
		auteur = Auteur.new(param)&lt;br /&gt;
		if auteur.save&lt;br /&gt;
			flash[:ok] = &amp;quot;L&#039;auteur a &amp;amp;eacute;t&amp;amp;eacute; ajout&amp;amp;eacute;&amp;quot;&lt;br /&gt;
		else&lt;br /&gt;
			flash[:error] = &amp;quot;Probl&amp;amp;egrave;me à l&#039;ajout de l&#039;auteur&amp;quot;&lt;br /&gt;
		end&lt;br /&gt;
		# ajoutAuteur n&#039;a pas besoin de vue. Une fois l&#039;auteur ajouté&lt;br /&gt;
		# on réaffiche la liste &lt;br /&gt;
		redirect_to :action =&amp;gt; &#039;listeAuteur&#039;&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
L&#039;action index est l&#039;action par défaut. L&#039;action listeAuteur donnera la liste des auteurs. On constate ici qu&#039;on peut largement se passer d&#039;écrire du SQL dans Rails. @auteurs est une variable qui contiendra tous les auteurs.&lt;br /&gt;
&lt;br /&gt;
== Mise en place des vues ==&lt;br /&gt;
&lt;br /&gt;
=== Le layout ===&lt;br /&gt;
&lt;br /&gt;
Tout d&#039;abord, créons une layout. Le layout est la structure commune à toutes les pages. Ils se trouvent dans &amp;lt;code&amp;gt;./app/views/layouts/&amp;lt;/code&amp;gt;.&lt;br /&gt;
&amp;lt;code&amp;gt;$ touch app/views/layouts/bibliotheque.rhtml&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
Editons maintenant ce fichier :&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;!DOCTYPE HTML PUBLIC &amp;quot;-//W3C//DTD HTML 4.0 Transitional//FR&amp;quot; &amp;quot;http://www.w3.org/TR/html4/loose.dtd&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
&amp;lt;head&amp;gt;&lt;br /&gt;
        &amp;lt;title&amp;gt;Biblioth&amp;amp;egrave;que - &amp;lt;%= controller.action_name %&amp;gt;&amp;lt;/title&amp;gt;&lt;br /&gt;
        &amp;lt;meta name=&amp;quot;author&amp;quot; content=&amp;quot;GEDsismik&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;meta http-equiv=&amp;quot;Content-Type&amp;quot; content=&amp;quot;text/html; charset=iso-8859-15&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/head&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
        &amp;lt;h1&amp;gt;Biblioth&amp;amp;egrave;que&amp;lt;/h1&amp;gt;&lt;br /&gt;
        &amp;lt;br/&amp;gt;&lt;br /&gt;
        &amp;lt;div class=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;p style=&amp;quot;color: green&amp;quot;&amp;gt;&amp;lt;%= flash[:notice] %&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
        &amp;lt;%= @content_for_layout %&amp;gt;&lt;br /&gt;
        &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
C&#039;est du Ruby embarqué dans du HTML. Pour ceux qui connaissent, c&#039;est un peu le même principe que le PHP. On écrit du HTML et aux endroits où on veut mettre du ruby, on place le code dans une balise &amp;lt;code&amp;gt;&amp;lt;% #code %&amp;gt;&amp;lt;/code&amp;gt;. Si on veut afficher la sortie du code, on place le code dans une balise &amp;lt;code&amp;gt;&amp;lt;%= #code %&amp;gt;&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;%= @content_for_layout %&amp;gt;&amp;lt;/code&amp;gt; affichera la partie propre à l&#039;action.&lt;br /&gt;
&lt;br /&gt;
=== La vue ===&lt;br /&gt;
&lt;br /&gt;
Les vues sont dans un répertoire de la forme &amp;lt;code&amp;gt;./app/views/&amp;lt;contrôleur&amp;gt;/&amp;lt;/code&amp;gt; et porte le nom &amp;lt;code&amp;gt;&amp;lt;action&amp;gt;.rhtml&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Créons donc le fichier &amp;lt;code&amp;gt;./app/views/bibliotheque/listeAuteur.rhtml&amp;lt;/code&amp;gt; :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;h2&amp;gt;Liste des auteurs&amp;lt;/h2&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;%&lt;br /&gt;
	@auteurs.each do |auteur|&lt;br /&gt;
		%&amp;gt;&amp;lt;li&amp;gt;&amp;lt;%= auteur.nom + &amp;quot; &amp;quot; + auteur.prenom %&amp;gt;&amp;lt;/li&amp;gt;&amp;lt;%&lt;br /&gt;
	end&lt;br /&gt;
%&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h2&amp;gt;Ajout d&#039;un auteur&amp;lt;/h2&amp;gt;&lt;br /&gt;
&amp;lt;%= start_form_tag :action =&amp;gt; &amp;quot;ajoutAuteur&amp;quot; %&amp;gt;&lt;br /&gt;
	&amp;lt;p&amp;gt;&amp;lt;label&amp;gt;Pr&amp;amp;eacute;nom : &amp;lt;%= text_field &#039;auteur&#039;, &#039;prenom&#039; %&amp;gt;&amp;lt;/label&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
	&amp;lt;p&amp;gt;&amp;lt;label&amp;gt;Nom : &amp;lt;%= text_field &#039;auteur&#039;, &#039;nom&#039; %&amp;gt;&amp;lt;/label&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
	&amp;lt;%= submit_tag(&amp;quot;Ajouter&amp;quot;) %&amp;gt;&lt;br /&gt;
&amp;lt;%= end_form_tag %&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== WebRick ==&lt;br /&gt;
&lt;br /&gt;
Vous disposez d&#039;un serveur de test appellé WebRick. Pour le lancez, tapez &amp;lt;code&amp;gt;./script/server &amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;$ ./script/server &lt;br /&gt;
=&amp;gt; Booting WEBrick...&lt;br /&gt;
=&amp;gt; Rails application started on http://0.0.0.0:3000&lt;br /&gt;
=&amp;gt; Ctrl-C to shutdown server; call with --help for options&lt;br /&gt;
[2006-10-19 18:32:57] INFO  WEBrick 1.3.1&lt;br /&gt;
[2006-10-19 18:32:57] INFO  ruby 1.8.5 (2006-08-25) [i686-linux]&lt;br /&gt;
[2006-10-19 18:32:57] INFO  WEBrick::HTTPServer#start: pid=26166 port=3000&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Par défaut, ce serveur écoute le port 3000. Ouvrez donc un navigateur et tapez : &amp;lt;code&amp;gt;http://localhost:3000&amp;lt;/code&amp;gt;.&lt;br /&gt;
Normalement, vous devriez obtenir une page de test. Les url de Rails par défaut se décompose de la sorte &amp;lt;code&amp;gt;http://localhost:3000/&amp;lt;contrôleur&amp;gt;/&amp;lt;action&amp;gt;[/&amp;lt;parametres&amp;gt;]&amp;lt;/code&amp;gt;. Tapez donc dans votre navigateur &amp;lt;code&amp;gt;http://localhost:3000/bibliotheque/listeAuteur&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Pour aller un peu plus loin ==&lt;br /&gt;
Ajoutons le support des livres dans &amp;lt;code&amp;gt;./app/controllers/bibliotheque_controller.rb&amp;lt;/code&amp;gt; :&lt;br /&gt;
&amp;lt;code&amp;gt;class BibliothequeController &amp;lt; ApplicationController&lt;br /&gt;
	def index&lt;br /&gt;
		listeLivre&lt;br /&gt;
		render_action &#039;listeLivre&#039;&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	def listeAuteur&lt;br /&gt;
		@auteurs = Auteur.find(:all, :order =&amp;gt; &amp;quot;nom,prenom&amp;quot;)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	def listeLivre&lt;br /&gt;
		@livres = Livre.find(:all, :order =&amp;gt; &amp;quot;titre&amp;quot;)&lt;br /&gt;
		@auteurs = Auteur.find(:all, :order =&amp;gt; &amp;quot;nom,prenom&amp;quot;).map{ |u| [ u.nom + &amp;quot; (&amp;quot; + u.prenom + &amp;quot;)&amp;quot;, u.id] }&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	def ajoutAuteur&lt;br /&gt;
		param = @params[&#039;auteur&#039;]&lt;br /&gt;
		auteur = Auteur.new(param)&lt;br /&gt;
		if auteur.save&lt;br /&gt;
			flash[:ok] = &amp;quot;L&#039;auteur a &amp;amp;eacute;t&amp;amp;eacute; ajout&amp;amp;eacute;&amp;quot;&lt;br /&gt;
		else&lt;br /&gt;
			flash[:error] = &amp;quot;Probl&amp;amp;egrave;me à l&#039;ajout de l&#039;auteur&amp;quot;&lt;br /&gt;
		end&lt;br /&gt;
		redirect_to :action =&amp;gt; &#039;listeAuteur&#039;&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	def ajoutLivre&lt;br /&gt;
		param = @params[&#039;livre&#039;]&lt;br /&gt;
		livre = Livre.new(param)&lt;br /&gt;
		if livre.save&lt;br /&gt;
			flash[:ok] = &amp;quot;Le livre a &amp;amp;eacute;t&amp;amp;eacute; ajout&amp;amp;eacute;&amp;quot;&lt;br /&gt;
		else&lt;br /&gt;
			flash[:error] = &amp;quot;Probl&amp;amp;egrave;me à l&#039;ajout du livre&amp;quot;&lt;br /&gt;
		end&lt;br /&gt;
		redirect_to :action =&amp;gt; &#039;listeLivre&#039;&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Créons du même coup la vue correspondante à listeLivre &amp;lt;code&amp;gt;./app/views/bibliotheque/listeLivre.rhtml&amp;lt;/code&amp;gt; :&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;% if @livres.blank? %&amp;gt;&lt;br /&gt;
	&amp;lt;h2&amp;gt;Liste des ouvrages&amp;lt;/h2&amp;gt;&lt;br /&gt;
	&amp;lt;ul&amp;gt;&lt;br /&gt;
	&amp;lt;%&lt;br /&gt;
		@livres.each do |livre|&lt;br /&gt;
			%&amp;gt;&amp;lt;li&amp;gt;&amp;lt;%= livre.titre %&amp;gt; - &amp;lt;%= livre.auteur.prenom + &amp;quot; &amp;quot; + livre.auteur.nom %&amp;gt;&amp;lt;/li&amp;gt;&amp;lt;%&lt;br /&gt;
		end&lt;br /&gt;
	%&amp;gt;&lt;br /&gt;
	&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;% else %&amp;gt;&lt;br /&gt;
	&amp;lt;i&amp;gt;La bibliothèque ne contient aucun livre.&amp;lt;/i&amp;gt;&lt;br /&gt;
&amp;lt;% end %&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;% unless @auteurs.blank? %&amp;gt;&lt;br /&gt;
	&amp;lt;h2&amp;gt;Ajout d&#039;un livre&amp;lt;/h2&amp;gt;&lt;br /&gt;
	&amp;lt;%= start_form_tag :action =&amp;gt; &amp;quot;ajoutLivre&amp;quot; %&amp;gt;&lt;br /&gt;
		&amp;lt;p&amp;gt;&amp;lt;label&amp;gt;Titre : &amp;lt;%= text_field &#039;livre&#039;, &#039;titre&#039; %&amp;gt;&amp;lt;/label&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
		&amp;lt;p&amp;gt;&amp;lt;label&amp;gt;Nombre d&#039;exemplaire : &amp;lt;%= text_field &#039;livre&#039;, &#039;quantite&#039; %&amp;gt;&amp;lt;/label&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
		&amp;lt;p&amp;gt;&amp;lt;label&amp;gt;Auteur : &amp;lt;%= select(&#039;livre&#039;, &#039;auteur_id&#039;, @auteurs) %&amp;gt;&amp;lt;/label&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
		&amp;lt;%= submit_tag(&amp;quot;Ajouter&amp;quot;) %&amp;gt;&lt;br /&gt;
	&amp;lt;%= end_form_tag %&amp;gt;&lt;br /&gt;
&amp;lt;% end %&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Les environnements ==&lt;br /&gt;
Pour utiliser les différents environnements, vous devez manipuler la variable &amp;lt;code&amp;gt;RAILS_ENV&amp;lt;/code&amp;gt;. Par défaut, vous êtes dans le premier environnement du fichier &amp;lt;code&amp;gt;./config/database.yml&amp;lt;/code&amp;gt; (à savoir en général development). Pour un &amp;lt;code&amp;gt;rake migrate&amp;lt;/code&amp;gt; en production par exemple :&lt;br /&gt;
&amp;lt;code&amp;gt;RAILS_ENV=production rake migrate&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
notez que l&#039;environnement &amp;lt;code&amp;gt;test&amp;lt;/code&amp;gt; efface les tables à chaque &amp;lt;code&amp;gt;rake&amp;lt;/code&amp;gt; et que l&#039;environnement &amp;lt;code&amp;gt;production&amp;lt;/code&amp;gt; n&#039;affiche aucune information en cas d&#039;exception (vous devez alors vous reportez aux fichiers de log &amp;lt;code&amp;gt;./log/&amp;lt;environnement&amp;gt;.log&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
= Copyright =&lt;br /&gt;
Copyright &amp;amp;copy; 19/10/2006, GEDsismik&lt;br /&gt;
{{CC-BY-NC-SA}}&lt;/div&gt;</summary>
		<author><name>Gedsismik</name></author>
	</entry>
	<entry>
		<id>https://lea-linux.org/docs/index.php?title=Ruby_On_Rails&amp;diff=13860</id>
		<title>Ruby On Rails</title>
		<link rel="alternate" type="text/html" href="https://lea-linux.org/docs/index.php?title=Ruby_On_Rails&amp;diff=13860"/>
		<updated>2006-10-19T19:12:12Z</updated>

		<summary type="html">&lt;p&gt;Gedsismik : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Développer sous Linux]]&lt;br /&gt;
= Ruby On Rails =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;leatitre&amp;quot;&amp;gt;Ruby On Rails&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;leapar&amp;quot;&amp;gt;par [mailto:gedsismik_at_free_point_fr GEDsismik]&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;leadesc&amp;quot;&amp;gt;Monter un projet Ruby On Rails (RoR) pas à pas.&amp;lt;/div&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Avant propos ==&lt;br /&gt;
&lt;br /&gt;
Ruby On Rails (RoR) est un framework web écrit en ruby. Ce document vous présente comment faire un petit projet Ruby On Rails.&lt;br /&gt;
&lt;br /&gt;
On supposera installé et correctement configuré :&lt;br /&gt;
 - un SGBD supporté par RoR (personnellement, j&#039;utilise MySQL)&lt;br /&gt;
 - Ruby&lt;br /&gt;
 - Rails et ses dépendances&lt;br /&gt;
&lt;br /&gt;
Il vous faudra aussi des notions de ruby.&lt;br /&gt;
&lt;br /&gt;
== Mise en place de l&#039;environnement ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;$ rails monsite&lt;br /&gt;
      create  &lt;br /&gt;
      create  app/controllers&lt;br /&gt;
      create  app/helpers&lt;br /&gt;
      create  app/models&lt;br /&gt;
      create  app/views/layouts&lt;br /&gt;
[...]&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
Le répertoire monsite vient d&#039;être créé ainsi que la structure initiale du projet. Entrez maintenant dans ce répertoire.&lt;br /&gt;
Normalement, il devrait contenir les fichiers et répertoires suivants : &lt;br /&gt;
&amp;lt;code&amp;gt;app&lt;br /&gt;
components&lt;br /&gt;
config&lt;br /&gt;
db&lt;br /&gt;
doc&lt;br /&gt;
lib&lt;br /&gt;
log&lt;br /&gt;
public&lt;br /&gt;
Rakefile&lt;br /&gt;
README&lt;br /&gt;
script&lt;br /&gt;
test&lt;br /&gt;
tmp&lt;br /&gt;
vendor&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Configuration ==&lt;br /&gt;
&lt;br /&gt;
Si vous n&#039;avez pas de base de donnée, créez-en :&lt;br /&gt;
&amp;lt;code&amp;gt;mysql&amp;gt; create database monsite_development;&lt;br /&gt;
mysql&amp;gt; create database monsite_test;&lt;br /&gt;
mysql&amp;gt; create database monsite_production;&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;aparte&amp;quot;&amp;gt;&lt;br /&gt;
Note : J&#039;en ai crée 3 pour pouvoir utiliser 3 environnements différents. Une seule peut suffir, ca dépend de ce que vous voulez faire.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous allons ensuite éditer ./config/database.yml. Vous avez 3 environnements de pré-configurées de la sorte : &lt;br /&gt;
&amp;lt;code&amp;gt;production:&lt;br /&gt;
  adapter: mysql&lt;br /&gt;
  database: monsite_production&lt;br /&gt;
  username: root&lt;br /&gt;
  password:&lt;br /&gt;
  host: localhost&amp;lt;/code&amp;gt;&lt;br /&gt;
Editez-le en fonction des paramètres de votre base de donnée&lt;br /&gt;
&amp;lt;code&amp;gt;production:&lt;br /&gt;
  adapter: mysql&lt;br /&gt;
  database: monsite_production&lt;br /&gt;
  username: gedsismik&lt;br /&gt;
  password: mypassord&lt;br /&gt;
  host: localhost&lt;br /&gt;
  socket: /var/run/mysql/mysql.sock&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;aparte&amp;quot;&amp;gt;&lt;br /&gt;
Note : Sous Slackware, j&#039;ai du ajouter la ligne &amp;lt;code&amp;gt;socket: /var/run/mysql/mysql.sock&amp;lt;/code&amp;gt; sinon il ne trouve pas la socket MySQL.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Modèle MVC ==&lt;br /&gt;
&lt;br /&gt;
Ruby On Rails utilise le motif de conception MVC (modèle-vue-contrôleur). Je m&#039;explique : dans un projet RoR, vous séparez :&lt;br /&gt;
 - les modèles (répertoire &amp;lt;code&amp;gt;./app/models&amp;lt;/code&amp;gt;) : ce qui concerne les données. Dans notre cas, c&#039;est donc principalement les tables des bases de données.&lt;br /&gt;
 - les vues (répertoire &amp;lt;code&amp;gt;./app/views&amp;lt;/code&amp;gt;) : ce qui concerne l&#039;interface. Dans notre cas, il s&#039;agit de la présentation des pages (en HTML et Ruby embarqué, nous verrons ça plus tard).&lt;br /&gt;
 - les contrôleurs (répertoire &amp;lt;code&amp;gt;./app/controllers&amp;lt;/code&amp;gt;) : concerne la gestion des évenements. Dans notre cas, ce sont les classes qui feront le lien entre les tables (models) et le html (views). Ce qui revient aux appels aux tables via les modèles et la création de variables dont le contenu sera affiché dans les vues.&lt;br /&gt;
&lt;br /&gt;
Pour palier à certaines fonctions qui ne peuvent pas suivre le modèle MVC à la lettre, Rails dispose d&#039;une partie appelée helpers (&amp;lt;code&amp;gt;./app/helpers&amp;lt;/code&amp;gt;) qui contient des classes accessibles aux vues et qui contient du code ayant accès aux modèles sans passer par les contrôleurs.&lt;br /&gt;
&lt;br /&gt;
== Création des modèles ==&lt;br /&gt;
&lt;br /&gt;
=== Génération des fichiers relatifs à la table ===&lt;br /&gt;
&lt;br /&gt;
On va utilisez le script &amp;lt;code&amp;gt;./script/generate&amp;lt;/code&amp;gt; pour générer la première table.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;$ ./script/generate model livre&lt;br /&gt;
      exists  app/models/&lt;br /&gt;
      exists  test/unit/&lt;br /&gt;
      exists  test/fixtures/&lt;br /&gt;
      create  app/models/livre.rb&lt;br /&gt;
      create  test/unit/livre_test.rb&lt;br /&gt;
      create  test/fixtures/livres.yml&lt;br /&gt;
      create  db/migrate&lt;br /&gt;
      create  db/migrate/001_create_livres.rb&lt;br /&gt;
$ ./script/generate model auteur&lt;br /&gt;
      exists  app/models/&lt;br /&gt;
      exists  test/unit/&lt;br /&gt;
      exists  test/fixtures/&lt;br /&gt;
      create  app/models/auteur.rb&lt;br /&gt;
      create  test/unit/auteur_test.rb&lt;br /&gt;
      create  test/fixtures/auteurs.yml&lt;br /&gt;
      exists  db/migrate&lt;br /&gt;
      create  db/migrate/002_create_auteurs.rb&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Fichiers de migration ===&lt;br /&gt;
&lt;br /&gt;
Les fichiers de migration/création de table se trouvent dans &amp;lt;code&amp;gt;./db/migrate&amp;lt;/code&amp;gt;. Il va falloir les éditez pour ajoutez les champs que vous voulez.&lt;br /&gt;
&amp;lt;div class=&amp;quot;aparte&amp;quot;&amp;gt;&lt;br /&gt;
Note : ne faites pas de champ &amp;quot;id&amp;quot;, ils sont automatiquement créés et gérer par Rails.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Fichier ./db/migrate/001_create_livres.rb ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;class CreateLivres &amp;lt; ActiveRecord::Migration&lt;br /&gt;
	def self.up&lt;br /&gt;
		create_table :livres do |t|&lt;br /&gt;
			t.column :titre, :string, :null =&amp;gt; false&lt;br /&gt;
			t.column :auteur_id, :integer, :null =&amp;gt; false&lt;br /&gt;
			t.column :quantite, :integer, :default =&amp;gt; &amp;quot;1&amp;quot;&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	def self.down&lt;br /&gt;
		drop_table :livres&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Fichier ./db/migrate/002_create_auteurs.rb ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;class CreateAuteurs &amp;lt; ActiveRecord::Migration&lt;br /&gt;
	def self.up&lt;br /&gt;
		create_table :auteurs do |t|&lt;br /&gt;
			t.column :nom, :string&lt;br /&gt;
			t.column :prenom, :string&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	def self.down&lt;br /&gt;
		drop_table :auteurs&lt;br /&gt;
	end&lt;br /&gt;
end&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;aparte&amp;quot;&amp;gt;Notez que vous pouvez réunir les deux fichiers en un seul :&lt;br /&gt;
./db/migrate/001_initial.rb&lt;br /&gt;
&amp;lt;code&amp;gt;class Initial &amp;lt; ActiveRecord::Migration&lt;br /&gt;
	def self.up&lt;br /&gt;
		create_table :livres do |t|&lt;br /&gt;
			t.column :titre, :string, :null =&amp;gt; false&lt;br /&gt;
			t.column :auteur_id, :integer, :null =&amp;gt; false&lt;br /&gt;
			t.column :quantite, :integer, :default =&amp;gt; &amp;quot;1&amp;quot;&lt;br /&gt;
		end&lt;br /&gt;
		create_table :auteurs do |t|&lt;br /&gt;
			t.column :nom, :string, :null =&amp;gt; false&lt;br /&gt;
			t.column :prenom, :string&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	def self.down&lt;br /&gt;
		drop_table :livres&lt;br /&gt;
		drop_table :auteurs&lt;br /&gt;
	end&lt;br /&gt;
end&amp;lt;/code&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Génération des tables ===&lt;br /&gt;
&lt;br /&gt;
Toujours dans le repertoire monsite, exécutez &amp;lt;code&amp;gt;rake migrate&amp;lt;/code&amp;gt;.&lt;br /&gt;
&amp;lt;code&amp;gt;$ rake migrate&lt;br /&gt;
(in /home/gedsismik/monsite)&lt;br /&gt;
== CreateLivres: migrating ====================================================&lt;br /&gt;
-- create_table(:livres)&lt;br /&gt;
   -&amp;gt; 0.0441s&lt;br /&gt;
== CreateLivres: migrated (0.0442s) ===========================================&lt;br /&gt;
&lt;br /&gt;
== CreateAuteurs: migrating ===================================================&lt;br /&gt;
-- create_table(:auteurs)&lt;br /&gt;
   -&amp;gt; 0.0457s&lt;br /&gt;
== CreateAuteurs: migrated (0.0458s) ==========================================&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Si vous regardez dans votre base de donnée, vous trouverez donc 3 tables :&lt;br /&gt;
 - auteurs&lt;br /&gt;
 - livres&lt;br /&gt;
 - schema_info&lt;br /&gt;
&lt;br /&gt;
Cette dernière table contient en fait la version de la base de donnée. Les versions sont incrémentées lors du &amp;lt;code&amp;gt;./script/generate model &amp;lt;nom table&amp;gt;&amp;lt;/code&amp;gt; et sont contenus dans le nom du fichier &amp;lt;code&amp;gt;./db/migrate/001_initial.rb&amp;lt;/code&amp;gt; est donc la version 1 de la base.&lt;br /&gt;
&lt;br /&gt;
=== Edition des modèles ===&lt;br /&gt;
Intéressons-nous aux fichiers &amp;lt;code&amp;gt;./app/models/auteur.rb&amp;lt;/code&amp;gt; et &amp;lt;code&amp;gt;./app/models/livre.rb&amp;lt;/code&amp;gt;. Ces classes héritant de ActiveRecord::Base, presque tout est déjà fait. Nous allons juste ajouter la relation : &amp;quot;un auteur écrit plusieurs livres&amp;quot;. Cette relation se traduit dans &amp;lt;code&amp;gt;./app/models/auteur.rb&amp;lt;/code&amp;gt; par :&lt;br /&gt;
&amp;lt;code&amp;gt;class Auteur &amp;lt; ActiveRecord::Base&lt;br /&gt;
	has_many :livre&lt;br /&gt;
end&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En contrepartie, on peut avoir besoin d&#039;accéder à l&#039;auteur d&#039;un livre. Modifions donc &amp;lt;code&amp;gt;./app/models/livre.rb&amp;lt;/code&amp;gt; en :&lt;br /&gt;
&amp;lt;code&amp;gt;class Livre &amp;lt; ActiveRecord::Base&lt;br /&gt;
	belongs_to :auteur&lt;br /&gt;
end&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Et voilà ! Ca devrait suffir pour les modèles. En effet, Rails fera tout seul le lien entre les deux tables grâce à auteur_id.&lt;br /&gt;
&lt;br /&gt;
== Création d&#039;un contrôleur ==&lt;br /&gt;
Tout d&#039;abord, utilisons, comme pour les modèles, le script &amp;lt;code&amp;gt;./script/generate&amp;lt;/code&amp;gt; :&lt;br /&gt;
&amp;lt;code&amp;gt;$ ./script/generate controller bibliotheque&lt;br /&gt;
      exists  app/controllers/&lt;br /&gt;
      exists  app/helpers/&lt;br /&gt;
      create  app/views/bibliotheque&lt;br /&gt;
      exists  test/functional/&lt;br /&gt;
      create  app/controllers/bibliotheque_controller.rb&lt;br /&gt;
      create  test/functional/bibliotheque_controller_test.rb&lt;br /&gt;
      create  app/helpers/bibliotheque_helper.rb&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Editons maintenant &amp;lt;code&amp;gt;./app/controllers/bibliotheque_controller.rb&amp;lt;/code&amp;gt;. Par défaut, vous avez :&lt;br /&gt;
&amp;lt;code&amp;gt;class BibliothequeController &amp;lt; ApplicationController&lt;br /&gt;
end&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous allons créer des actions. Un contrôleur peut comporter plusieurs actions.&lt;br /&gt;
&amp;lt;code&amp;gt;class BibliothequeController &amp;lt; ApplicationController&lt;br /&gt;
	def index&lt;br /&gt;
		listeAuteur&lt;br /&gt;
		render_action &#039;listeAuteur&#039;&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	def listeAuteur&lt;br /&gt;
		@auteurs = Auteur.find(:all, :order =&amp;gt; &amp;quot;nom,prenom&amp;quot;)&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	def ajoutAuteur&lt;br /&gt;
		param = @params[&#039;auteur&#039;]&lt;br /&gt;
		auteur = Auteur.new(param)&lt;br /&gt;
		if auteur.save&lt;br /&gt;
			flash[:ok] = &amp;quot;L&#039;auteur a &amp;amp;eacute;t&amp;amp;eacute; ajout&amp;amp;eacute;&amp;quot;&lt;br /&gt;
		else&lt;br /&gt;
			flash[:error] = &amp;quot;Probl&amp;amp;egrave;me à l&#039;ajout de l&#039;auteur&amp;quot;&lt;br /&gt;
		end&lt;br /&gt;
		# ajoutAuteur n&#039;a pas besoin de vue. Une fois l&#039;auteur ajouté&lt;br /&gt;
		# on réaffiche la liste &lt;br /&gt;
		redirect_to :action =&amp;gt; &#039;listeAuteur&#039;&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
L&#039;action index est l&#039;action par défaut. L&#039;action listeAuteur donnera la liste des auteurs. On constate ici qu&#039;on peut largement se passer d&#039;écrire du SQL dans Rails. @auteurs est une variable qui contiendra tous les auteurs.&lt;br /&gt;
&lt;br /&gt;
== Mise en place des vues ==&lt;br /&gt;
&lt;br /&gt;
=== Le layout ===&lt;br /&gt;
&lt;br /&gt;
Tout d&#039;abord, créons une layout. Le layout est la structure commune à toutes les pages. Ils se trouvent dans &amp;lt;code&amp;gt;./app/views/layouts/&amp;lt;/code&amp;gt;.&lt;br /&gt;
&amp;lt;code&amp;gt;$ touch app/views/layouts/bibliotheque.rhtml&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
Editons maintenant ce fichier :&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;!DOCTYPE HTML PUBLIC &amp;quot;-//W3C//DTD HTML 4.0 Transitional//FR&amp;quot; &amp;quot;http://www.w3.org/TR/html4/loose.dtd&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
&amp;lt;head&amp;gt;&lt;br /&gt;
        &amp;lt;title&amp;gt;Biblioth&amp;amp;egrave;que - &amp;lt;%= controller.action_name %&amp;gt;&amp;lt;/title&amp;gt;&lt;br /&gt;
        &amp;lt;meta name=&amp;quot;author&amp;quot; content=&amp;quot;GEDsismik&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;meta http-equiv=&amp;quot;Content-Type&amp;quot; content=&amp;quot;text/html; charset=iso-8859-15&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/head&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
        &amp;lt;h1&amp;gt;Biblioth&amp;amp;egrave;que&amp;lt;/h1&amp;gt;&lt;br /&gt;
        &amp;lt;br/&amp;gt;&lt;br /&gt;
        &amp;lt;div class=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;p style=&amp;quot;color: green&amp;quot;&amp;gt;&amp;lt;%= flash[:notice] %&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
        &amp;lt;%= @content_for_layout %&amp;gt;&lt;br /&gt;
        &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
C&#039;est du Ruby embarqué dans du HTML. Pour ceux qui connaissent, c&#039;est un peu le même principe que le PHP. On écrit du HTML et aux endroits où on veut mettre du ruby, on place le code dans une balise &amp;lt;code&amp;gt;&amp;lt;% #code %&amp;gt;&amp;lt;/code&amp;gt;. Si on veut afficher la sortie du code, on place le code dans une balise &amp;lt;code&amp;gt;&amp;lt;%= #code %&amp;gt;&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;%= @content_for_layout %&amp;gt;&amp;lt;/code&amp;gt; affichera la partie propre à l&#039;action.&lt;br /&gt;
&lt;br /&gt;
=== La vue ===&lt;br /&gt;
&lt;br /&gt;
Les vues sont dans un répertoire de la forme &amp;lt;code&amp;gt;./app/views/&amp;lt;contrôleur&amp;gt;/&amp;lt;/code&amp;gt; et porte le nom &amp;lt;code&amp;gt;&amp;lt;action&amp;gt;.rhtml&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Créons donc le fichier &amp;lt;code&amp;gt;./app/views/bibliotheque/listeAuteur.rhtml&amp;lt;/code&amp;gt; :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;h2&amp;gt;Liste des auteurs&amp;lt;/h2&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;%&lt;br /&gt;
	@auteurs.each do |auteur|&lt;br /&gt;
		%&amp;gt;&amp;lt;li&amp;gt;&amp;lt;%= auteur.nom + &amp;quot; &amp;quot; + auteur.prenom %&amp;gt;&amp;lt;/li&amp;gt;&amp;lt;%&lt;br /&gt;
	end&lt;br /&gt;
%&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h2&amp;gt;Ajout d&#039;un auteur&amp;lt;/h2&amp;gt;&lt;br /&gt;
&amp;lt;%= start_form_tag :action =&amp;gt; &amp;quot;ajoutAuteur&amp;quot; %&amp;gt;&lt;br /&gt;
	&amp;lt;p&amp;gt;&amp;lt;label&amp;gt;Pr&amp;amp;eacute;nom : &amp;lt;%= text_field &#039;auteur&#039;, &#039;prenom&#039; %&amp;gt;&amp;lt;/label&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
	&amp;lt;p&amp;gt;&amp;lt;label&amp;gt;Nom : &amp;lt;%= text_field &#039;auteur&#039;, &#039;nom&#039; %&amp;gt;&amp;lt;/label&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
	&amp;lt;%= submit_tag(&amp;quot;Ajouter&amp;quot;) %&amp;gt;&lt;br /&gt;
&amp;lt;%= end_form_tag %&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== WebRick ==&lt;br /&gt;
&lt;br /&gt;
Vous disposez d&#039;un serveur de test appellé WebRick. Pour le lancez, tapez &amp;lt;code&amp;gt;./script/server &amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;$ ./script/server &lt;br /&gt;
=&amp;gt; Booting WEBrick...&lt;br /&gt;
=&amp;gt; Rails application started on http://0.0.0.0:3000&lt;br /&gt;
=&amp;gt; Ctrl-C to shutdown server; call with --help for options&lt;br /&gt;
[2006-10-19 18:32:57] INFO  WEBrick 1.3.1&lt;br /&gt;
[2006-10-19 18:32:57] INFO  ruby 1.8.5 (2006-08-25) [i686-linux]&lt;br /&gt;
[2006-10-19 18:32:57] INFO  WEBrick::HTTPServer#start: pid=26166 port=3000&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Par défaut, ce serveur écoute le port 3000. Ouvrez donc un navigateur et tapez : &amp;lt;code&amp;gt;http://localhost:3000&amp;lt;/code&amp;gt;.&lt;br /&gt;
Normalement, vous devriez obtenir une page de test. Les url de Rails par défaut se décompose de la sorte &amp;lt;code&amp;gt;http://localhost:3000/&amp;lt;contrôleur&amp;gt;/&amp;lt;action&amp;gt;[/&amp;lt;parametres&amp;gt;]&amp;lt;/code&amp;gt;. Tapez donc dans votre navigateur &amp;lt;code&amp;gt;http://localhost:3000/bibliotheque/listeAuteur&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Les environnements ==&lt;br /&gt;
Pour utiliser les différents environnements, vous devez manipuler la variable &amp;lt;code&amp;gt;RAILS_ENV&amp;lt;/code&amp;gt;. Par défaut, vous êtes dans le premier environnement du fichier &amp;lt;code&amp;gt;./config/database.yml&amp;lt;/code&amp;gt; (à savoir en général development). Pour un &amp;lt;code&amp;gt;rake migrate&amp;lt;/code&amp;gt; en production par exemple :&lt;br /&gt;
&amp;lt;code&amp;gt;RAILS_ENV=production rake migrate&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
notez que l&#039;environnement &amp;lt;code&amp;gt;test&amp;lt;/code&amp;gt; efface les tables à chaque &amp;lt;code&amp;gt;rake&amp;lt;/code&amp;gt; et que l&#039;environnement &amp;lt;code&amp;gt;production&amp;lt;/code&amp;gt; n&#039;affiche aucune information en cas d&#039;exception (vous devez alors vous reportez aux fichiers de log &amp;lt;code&amp;gt;./log/&amp;lt;environnement&amp;gt;.log&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
= Copyright =&lt;br /&gt;
Copyright &amp;amp;copy; 19/10/2006, GEDsismik&lt;br /&gt;
{{CC-BY-NC-SA}}&lt;/div&gt;</summary>
		<author><name>Gedsismik</name></author>
	</entry>
	<entry>
		<id>https://lea-linux.org/docs/index.php?title=Ruby_On_Rails&amp;diff=13859</id>
		<title>Ruby On Rails</title>
		<link rel="alternate" type="text/html" href="https://lea-linux.org/docs/index.php?title=Ruby_On_Rails&amp;diff=13859"/>
		<updated>2006-10-19T19:01:19Z</updated>

		<summary type="html">&lt;p&gt;Gedsismik : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Développer sous Linux]]&lt;br /&gt;
= Ruby On Rails =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;leatitre&amp;quot;&amp;gt;Ruby On Rails&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;leapar&amp;quot;&amp;gt;par [mailto:gedsismik_at_free_point_fr GEDsismik]&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;leadesc&amp;quot;&amp;gt;Monter un projet Ruby On Rails (RoR) pas à pas.&amp;lt;/div&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Avant propos ==&lt;br /&gt;
&lt;br /&gt;
Ruby On Rails (RoR) est un framework web écrit en ruby. Ce document vous présente comment faire un petit projet Ruby On Rails.&lt;br /&gt;
&lt;br /&gt;
On supposera installé et correctement configuré :&lt;br /&gt;
 - un SGBD supporté par RoR (personnellement, j&#039;utilise MySQL)&lt;br /&gt;
 - Ruby&lt;br /&gt;
 - Rails et ses dépendances&lt;br /&gt;
&lt;br /&gt;
Il vous faudra aussi des notions de ruby.&lt;br /&gt;
&lt;br /&gt;
== Mise en place de l&#039;environnement ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;$ rails monsite&lt;br /&gt;
      create  &lt;br /&gt;
      create  app/controllers&lt;br /&gt;
      create  app/helpers&lt;br /&gt;
      create  app/models&lt;br /&gt;
      create  app/views/layouts&lt;br /&gt;
[...]&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
Le répertoire monsite vient d&#039;être créé ainsi que la structure initiale du projet. Entrez maintenant dans ce répertoire.&lt;br /&gt;
Normalement, il devrait contenir les fichiers et répertoires suivants : &lt;br /&gt;
&amp;lt;code&amp;gt;app&lt;br /&gt;
components&lt;br /&gt;
config&lt;br /&gt;
db&lt;br /&gt;
doc&lt;br /&gt;
lib&lt;br /&gt;
log&lt;br /&gt;
public&lt;br /&gt;
Rakefile&lt;br /&gt;
README&lt;br /&gt;
script&lt;br /&gt;
test&lt;br /&gt;
tmp&lt;br /&gt;
vendor&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Configuration ==&lt;br /&gt;
&lt;br /&gt;
Si vous n&#039;avez pas de base de donnée, créez-en :&lt;br /&gt;
&amp;lt;code&amp;gt;mysql&amp;gt; create database monsite_development;&lt;br /&gt;
mysql&amp;gt; create database monsite_test;&lt;br /&gt;
mysql&amp;gt; create database monsite_production;&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;aparte&amp;quot;&amp;gt;&lt;br /&gt;
Note : J&#039;en ai crée 3 pour pouvoir utiliser 3 environnements différents. Une seule peut suffir, ca dépend de ce que vous voulez faire.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous allons ensuite éditer ./config/database.yml. Vous avez 3 environnements de pré-configurées de la sorte : &lt;br /&gt;
&amp;lt;code&amp;gt;production:&lt;br /&gt;
  adapter: mysql&lt;br /&gt;
  database: monsite_production&lt;br /&gt;
  username: root&lt;br /&gt;
  password:&lt;br /&gt;
  host: localhost&amp;lt;/code&amp;gt;&lt;br /&gt;
Editez-le en fonction des paramètres de votre base de donnée&lt;br /&gt;
&amp;lt;code&amp;gt;production:&lt;br /&gt;
  adapter: mysql&lt;br /&gt;
  database: monsite_production&lt;br /&gt;
  username: gedsismik&lt;br /&gt;
  password: mypassord&lt;br /&gt;
  host: localhost&lt;br /&gt;
  socket: /var/run/mysql/mysql.sock&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;aparte&amp;quot;&amp;gt;&lt;br /&gt;
Note : Sous Slackware, j&#039;ai du ajouter la ligne &amp;lt;code&amp;gt;socket: /var/run/mysql/mysql.sock&amp;lt;/code&amp;gt; sinon il ne trouve pas la socket MySQL.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Modèle MVC ==&lt;br /&gt;
&lt;br /&gt;
Ruby On Rails utilise le motif de conception MVC (modèle-vue-contrôleur). Je m&#039;explique : dans un projet RoR, vous séparez :&lt;br /&gt;
 - les modèles (répertoire &amp;lt;code&amp;gt;./app/models&amp;lt;/code&amp;gt;) : ce qui concerne les données. Dans notre cas, c&#039;est donc principalement les tables des bases de données.&lt;br /&gt;
 - les vues (répertoire &amp;lt;code&amp;gt;./app/views&amp;lt;/code&amp;gt;) : ce qui concerne l&#039;interface. Dans notre cas, il s&#039;agit de la présentation des pages (en HTML et Ruby embarqué, nous verrons ça plus tard).&lt;br /&gt;
 - les contrôleurs (répertoire &amp;lt;code&amp;gt;./app/controllers&amp;lt;/code&amp;gt;) : concerne la gestion des évenements. Dans notre cas, ce sont les classes qui feront le lien entre les tables (models) et le html (views). Ce qui revient aux appels aux tables via les modèles et la création de variables dont le contenu sera affiché dans les vues.&lt;br /&gt;
&lt;br /&gt;
Pour palier à certaines fonctions qui ne peuvent pas suivre le modèle MVC à la lettre, Rails dispose d&#039;une partie appelée helpers (&amp;lt;code&amp;gt;./app/helpers&amp;lt;/code&amp;gt;) qui contient des classes accessibles aux vues et qui contient du code ayant accès aux modèles sans passer par les contrôleurs.&lt;br /&gt;
&lt;br /&gt;
== Création des modèles ==&lt;br /&gt;
&lt;br /&gt;
=== Génération des fichiers relatifs à la table ===&lt;br /&gt;
&lt;br /&gt;
On va utilisez le script &amp;lt;code&amp;gt;./script/generate&amp;lt;/code&amp;gt; pour générer la première table.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;$ ./script/generate model livre&lt;br /&gt;
      exists  app/models/&lt;br /&gt;
      exists  test/unit/&lt;br /&gt;
      exists  test/fixtures/&lt;br /&gt;
      create  app/models/livre.rb&lt;br /&gt;
      create  test/unit/livre_test.rb&lt;br /&gt;
      create  test/fixtures/livres.yml&lt;br /&gt;
      create  db/migrate&lt;br /&gt;
      create  db/migrate/001_create_livres.rb&lt;br /&gt;
$ ./script/generate model auteur&lt;br /&gt;
      exists  app/models/&lt;br /&gt;
      exists  test/unit/&lt;br /&gt;
      exists  test/fixtures/&lt;br /&gt;
      create  app/models/auteur.rb&lt;br /&gt;
      create  test/unit/auteur_test.rb&lt;br /&gt;
      create  test/fixtures/auteurs.yml&lt;br /&gt;
      exists  db/migrate&lt;br /&gt;
      create  db/migrate/002_create_auteurs.rb&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Fichiers de migration ===&lt;br /&gt;
&lt;br /&gt;
Les fichiers de migration/création de table se trouvent dans &amp;lt;code&amp;gt;./db/migrate&amp;lt;/code&amp;gt;. Il va falloir les éditez pour ajoutez les champs que vous voulez.&lt;br /&gt;
&amp;lt;div class=&amp;quot;aparte&amp;quot;&amp;gt;&lt;br /&gt;
Note : ne faites pas de champ &amp;quot;id&amp;quot;, ils sont automatiquement créés et gérer par Rails.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Fichier ./db/migrate/001_create_livres.rb ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;class CreateLivres &amp;lt; ActiveRecord::Migration&lt;br /&gt;
	def self.up&lt;br /&gt;
		create_table :livres do |t|&lt;br /&gt;
			t.column :titre, :string, :null =&amp;gt; false&lt;br /&gt;
			t.column :auteur_id, :integer, :null =&amp;gt; false&lt;br /&gt;
			t.column :quantite, :integer, :default =&amp;gt; &amp;quot;1&amp;quot;&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	def self.down&lt;br /&gt;
		drop_table :livres&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Fichier ./db/migrate/002_create_auteurs.rb ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;class CreateAuteurs &amp;lt; ActiveRecord::Migration&lt;br /&gt;
	def self.up&lt;br /&gt;
		create_table :auteurs do |t|&lt;br /&gt;
			t.column :nom, :string&lt;br /&gt;
			t.column :prenom, :string&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	def self.down&lt;br /&gt;
		drop_table :auteurs&lt;br /&gt;
	end&lt;br /&gt;
end&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;aparte&amp;quot;&amp;gt;Notez que vous pouvez réunir les deux fichiers en un seul :&lt;br /&gt;
./db/migrate/001_initial.rb&lt;br /&gt;
&amp;lt;code&amp;gt;class Initial &amp;lt; ActiveRecord::Migration&lt;br /&gt;
	def self.up&lt;br /&gt;
		create_table :livres do |t|&lt;br /&gt;
			t.column :titre, :string, :null =&amp;gt; false&lt;br /&gt;
			t.column :auteur_id, :integer, :null =&amp;gt; false&lt;br /&gt;
			t.column :quantite, :integer, :default =&amp;gt; &amp;quot;1&amp;quot;&lt;br /&gt;
		end&lt;br /&gt;
		create_table :auteurs do |t|&lt;br /&gt;
			t.column :nom, :string, :null =&amp;gt; false&lt;br /&gt;
			t.column :prenom, :string&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	def self.down&lt;br /&gt;
		drop_table :livres&lt;br /&gt;
		drop_table :auteurs&lt;br /&gt;
	end&lt;br /&gt;
end&amp;lt;/code&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Génération des tables ===&lt;br /&gt;
&lt;br /&gt;
Toujours dans le repertoire monsite, exécutez &amp;lt;code&amp;gt;rake migrate&amp;lt;/code&amp;gt;.&lt;br /&gt;
&amp;lt;code&amp;gt;$ rake migrate&lt;br /&gt;
(in /home/gedsismik/monsite)&lt;br /&gt;
== CreateLivres: migrating ====================================================&lt;br /&gt;
-- create_table(:livres)&lt;br /&gt;
   -&amp;gt; 0.0441s&lt;br /&gt;
== CreateLivres: migrated (0.0442s) ===========================================&lt;br /&gt;
&lt;br /&gt;
== CreateAuteurs: migrating ===================================================&lt;br /&gt;
-- create_table(:auteurs)&lt;br /&gt;
   -&amp;gt; 0.0457s&lt;br /&gt;
== CreateAuteurs: migrated (0.0458s) ==========================================&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Si vous regardez dans votre base de donnée, vous trouverez donc 3 tables :&lt;br /&gt;
 - auteurs&lt;br /&gt;
 - livres&lt;br /&gt;
 - schema_info&lt;br /&gt;
&lt;br /&gt;
Cette dernière table contient en fait la version de la base de donnée. Les versions sont incrémentées lors du &amp;lt;code&amp;gt;./script/generate model &amp;lt;nom table&amp;gt;&amp;lt;/code&amp;gt; et sont contenus dans le nom du fichier &amp;lt;code&amp;gt;./db/migrate/001_initial.rb&amp;lt;/code&amp;gt; est donc la version 1 de la base.&lt;br /&gt;
&lt;br /&gt;
=== Edition des modèles ===&lt;br /&gt;
Intéressons-nous aux fichiers &amp;lt;code&amp;gt;./app/models/auteur.rb&amp;lt;/code&amp;gt; et &amp;lt;code&amp;gt;./app/models/livre.rb&amp;lt;/code&amp;gt;. Ces classes héritant de ActiveRecord::Base, presque tout est déjà fait. Nous allons juste ajouter la relation : &amp;quot;un auteur écrit plusieurs livres&amp;quot;. Cette relation se traduit dans &amp;lt;code&amp;gt;./app/models/auteur.rb&amp;lt;/code&amp;gt; par :&lt;br /&gt;
&amp;lt;code&amp;gt;class Auteur &amp;lt; ActiveRecord::Base&lt;br /&gt;
	has_many :livre&lt;br /&gt;
end&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
En contrepartie, on peut avoir besoin d&#039;accéder à l&#039;auteur d&#039;un livre. Modifions donc &amp;lt;code&amp;gt;./app/models/livre.rb&amp;lt;/code&amp;gt; en :&lt;br /&gt;
&amp;lt;code&amp;gt;class Livre &amp;lt; ActiveRecord::Base&lt;br /&gt;
	belongs_to :auteur&lt;br /&gt;
end&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Et voilà ! Ca devrait suffir pour les modèles. En effet, Rails fera tout seul le lien entre les deux tables grâce à auteur_id.&lt;br /&gt;
&lt;br /&gt;
== Création d&#039;un contrôleur ==&lt;br /&gt;
Tout d&#039;abord, utilisons, comme pour les modèles, le script &amp;lt;code&amp;gt;./script/generate&amp;lt;/code&amp;gt; :&lt;br /&gt;
&amp;lt;code&amp;gt;$ ./script/generate controller bibliotheque&lt;br /&gt;
      exists  app/controllers/&lt;br /&gt;
      exists  app/helpers/&lt;br /&gt;
      create  app/views/bibliotheque&lt;br /&gt;
      exists  test/functional/&lt;br /&gt;
      create  app/controllers/bibliotheque_controller.rb&lt;br /&gt;
      create  test/functional/bibliotheque_controller_test.rb&lt;br /&gt;
      create  app/helpers/bibliotheque_helper.rb&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Editons maintenant &amp;lt;code&amp;gt;./app/controllers/bibliotheque_controller.rb&amp;lt;/code&amp;gt;. Par défaut, vous avez :&lt;br /&gt;
&amp;lt;code&amp;gt;class BibliothequeController &amp;lt; ApplicationController&lt;br /&gt;
end&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous allons créer des actions. Un contrôleur peut comporter plusieurs actions.&lt;br /&gt;
&amp;lt;code&amp;gt;class BibliothequeController &amp;lt; ApplicationController&lt;br /&gt;
	def index&lt;br /&gt;
		listeAuteur&lt;br /&gt;
		render_action &#039;listeAuteur&#039;&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	def listeAuteur&lt;br /&gt;
		@auteurs = Auteur.find(:all, :order =&amp;gt; &amp;quot;nom,prenom&amp;quot;)&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	def ajoutAuteur&lt;br /&gt;
		param = @params[&#039;auteur&#039;]&lt;br /&gt;
		auteur = Auteur.new(param)&lt;br /&gt;
		if auteur.save&lt;br /&gt;
			flash[:ok] = &amp;quot;L&#039;auteur a &amp;amp;eacute;t&amp;amp;eacute; ajout&amp;amp;eacute;&amp;quot;&lt;br /&gt;
		else&lt;br /&gt;
			flash[:error] = &amp;quot;Probl&amp;amp;egrave;me à l&#039;ajout de l&#039;auteur&amp;quot;&lt;br /&gt;
		end&lt;br /&gt;
		# ajoutAuteur n&#039;a pas besoin de vue. Une fois l&#039;auteur ajouté&lt;br /&gt;
		# on réaffiche la liste &lt;br /&gt;
		redirect_to :action =&amp;gt; &#039;listeAuteur&#039;&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
L&#039;action index est l&#039;action par défaut. L&#039;action listeAuteur donnera la liste des auteurs. On constate ici qu&#039;on peut largement se passer d&#039;écrire du SQL dans Rails. @auteurs est une variable qui contiendra tous les auteurs.&lt;br /&gt;
&lt;br /&gt;
== Mise en place des vues ==&lt;br /&gt;
&lt;br /&gt;
=== Le layout ===&lt;br /&gt;
&lt;br /&gt;
Tout d&#039;abord, créons une layout. Le layout est la structure commune à toutes les pages. Ils se trouvent dans &amp;lt;code&amp;gt;./app/views/layouts/&amp;lt;/code&amp;gt;.&lt;br /&gt;
&amp;lt;code&amp;gt;$ touch app/views/layouts/bibliotheque.rhtml&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
Editons maintenant ce fichier :&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;!DOCTYPE HTML PUBLIC &amp;quot;-//W3C//DTD HTML 4.0 Transitional//FR&amp;quot; &amp;quot;http://www.w3.org/TR/html4/loose.dtd&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
&amp;lt;head&amp;gt;&lt;br /&gt;
        &amp;lt;title&amp;gt;Biblioth&amp;amp;egrave;que - &amp;lt;%= controller.action_name %&amp;gt;&amp;lt;/title&amp;gt;&lt;br /&gt;
        &amp;lt;meta name=&amp;quot;author&amp;quot; content=&amp;quot;GEDsismik&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;meta http-equiv=&amp;quot;Content-Type&amp;quot; content=&amp;quot;text/html; charset=iso-8859-15&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/head&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
        &amp;lt;h1&amp;gt;Biblioth&amp;amp;egrave;que&amp;lt;/h1&amp;gt;&lt;br /&gt;
        &amp;lt;br/&amp;gt;&lt;br /&gt;
        &amp;lt;div class=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;p style=&amp;quot;color: green&amp;quot;&amp;gt;&amp;lt;%= flash[:notice] %&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
        &amp;lt;%= @content_for_layout %&amp;gt;&lt;br /&gt;
        &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
C&#039;est du Ruby embarqué dans du HTML. Pour ceux qui connaissent, c&#039;est un peu le même principe que le PHP. On écrit du HTML et aux endroits où on veut mettre du ruby, on place le code dans une balise &amp;lt;code&amp;gt;&amp;lt;% #code %&amp;gt;&amp;lt;/code&amp;gt;. Si on veut afficher la sortie du code, on place le code dans une balise &amp;lt;code&amp;gt;&amp;lt;%= #code %&amp;gt;&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;%= @content_for_layout %&amp;gt;&amp;lt;/code&amp;gt; affichera la partie propre à l&#039;action.&lt;br /&gt;
&lt;br /&gt;
=== La vue ===&lt;br /&gt;
&lt;br /&gt;
Les vues sont dans un répertoire de la forme &amp;lt;code&amp;gt;./app/views/&amp;lt;contrôleur&amp;gt;/&amp;lt;/code&amp;gt; et porte le nom &amp;lt;code&amp;gt;&amp;lt;action&amp;gt;.rhtml&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Créons donc le fichier &amp;lt;code&amp;gt;./app/views/bibliotheque/listeAuteur.rhtml&amp;lt;/code&amp;gt; :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;h2&amp;gt;Liste des auteurs&amp;lt;/h2&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;%&lt;br /&gt;
	@auteurs.each do |auteur|&lt;br /&gt;
		%&amp;gt;&amp;lt;li&amp;gt;&amp;lt;%= auteur.nom + &amp;quot; &amp;quot; + auteur.prenom %&amp;gt;&amp;lt;/li&amp;gt;&amp;lt;%&lt;br /&gt;
	end&lt;br /&gt;
%&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h2&amp;gt;Ajout d&#039;un auteur&amp;lt;/h2&amp;gt;&lt;br /&gt;
&amp;lt;%= start_form_tag :action =&amp;gt; &amp;quot;ajoutAuteur&amp;quot; %&amp;gt;&lt;br /&gt;
	&amp;lt;p&amp;gt;&amp;lt;label&amp;gt;Pr&amp;amp;eacute;nom : &amp;lt;%= text_field &#039;auteur&#039;, &#039;prenom&#039; %&amp;gt;&amp;lt;/label&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
	&amp;lt;p&amp;gt;&amp;lt;label&amp;gt;Nom : &amp;lt;%= text_field &#039;auteur&#039;, &#039;nom&#039; %&amp;gt;&amp;lt;/label&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
	&amp;lt;%= submit_tag(&amp;quot;Ajouter&amp;quot;) %&amp;gt;&lt;br /&gt;
&amp;lt;%= end_form_tag %&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== WebRick ==&lt;br /&gt;
&lt;br /&gt;
Vous disposez d&#039;un serveur de test appellé WebRick. Pour le lancez, tapez &amp;lt;code&amp;gt;./script/server &amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;$ ./script/server &lt;br /&gt;
=&amp;gt; Booting WEBrick...&lt;br /&gt;
=&amp;gt; Rails application started on http://0.0.0.0:3000&lt;br /&gt;
=&amp;gt; Ctrl-C to shutdown server; call with --help for options&lt;br /&gt;
[2006-10-19 18:32:57] INFO  WEBrick 1.3.1&lt;br /&gt;
[2006-10-19 18:32:57] INFO  ruby 1.8.5 (2006-08-25) [i686-linux]&lt;br /&gt;
[2006-10-19 18:32:57] INFO  WEBrick::HTTPServer#start: pid=26166 port=3000&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Par défaut, ce serveur écoute le port 3000. Ouvrez donc un navigateur et tapez : &amp;lt;code&amp;gt;http://localhost:3000&amp;lt;/code&amp;gt;.&lt;br /&gt;
Normalement, vous devriez obtenir une page de test. Les url de Rails par défaut se décompose de la sorte &amp;lt;code&amp;gt;http://localhost:3000/&amp;lt;contrôleur&amp;gt;/&amp;lt;action&amp;gt;[/&amp;lt;parametres&amp;gt;]&amp;lt;/code&amp;gt;. Tapez donc dans votre navigateur &amp;lt;code&amp;gt;http://localhost:3000/bibliotheque/listeAuteur&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Les environnements ==&lt;br /&gt;
&lt;br /&gt;
= Copyright =&lt;br /&gt;
Copyright &amp;amp;copy; 19/10/2006, GEDsismik&lt;br /&gt;
{{CC-BY-NC-SA}}&lt;/div&gt;</summary>
		<author><name>Gedsismik</name></author>
	</entry>
	<entry>
		<id>https://lea-linux.org/docs/index.php?title=Ruby_On_Rails&amp;diff=13858</id>
		<title>Ruby On Rails</title>
		<link rel="alternate" type="text/html" href="https://lea-linux.org/docs/index.php?title=Ruby_On_Rails&amp;diff=13858"/>
		<updated>2006-10-19T16:11:13Z</updated>

		<summary type="html">&lt;p&gt;Gedsismik : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Développer sous Linux]]&lt;br /&gt;
= Ruby On Rails =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;leatitre&amp;quot;&amp;gt;Ruby On Rails&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;leapar&amp;quot;&amp;gt;par [mailto:gedsismik_at_free_point_fr GEDsismik]&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;leadesc&amp;quot;&amp;gt;Monter un projet Ruby On Rails (RoR) pas à pas.&amp;lt;/div&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Avant propos ==&lt;br /&gt;
&lt;br /&gt;
On supposera installé et correctement configuré :&lt;br /&gt;
 - un SGBD supporté par RoR (personnellement, j&#039;utilise MySQL)&lt;br /&gt;
 - Ruby&lt;br /&gt;
 - Rails et ses dépendances&lt;br /&gt;
&lt;br /&gt;
Il vous faudra aussi des notions de ruby.&lt;br /&gt;
&lt;br /&gt;
== Mise en place de l&#039;environnement ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;$ rails monsite&lt;br /&gt;
      create  &lt;br /&gt;
      create  app/controllers&lt;br /&gt;
      create  app/helpers&lt;br /&gt;
      create  app/models&lt;br /&gt;
      create  app/views/layouts&lt;br /&gt;
[...]&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
Le répertoire monsite vient d&#039;être créé ainsi que la structure initiale du projet. Entrez maintenant dans ce répertoire.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;app&lt;br /&gt;
components&lt;br /&gt;
config&lt;br /&gt;
db&lt;br /&gt;
doc&lt;br /&gt;
lib&lt;br /&gt;
log&lt;br /&gt;
public&lt;br /&gt;
Rakefile&lt;br /&gt;
README&lt;br /&gt;
script&lt;br /&gt;
test&lt;br /&gt;
tmp&lt;br /&gt;
vendor&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Configuration ==&lt;br /&gt;
&lt;br /&gt;
Si vous n&#039;avez pas de base de donnée, créez-en :&lt;br /&gt;
&amp;lt;code&amp;gt;mysql&amp;gt; create database monsite_development;&lt;br /&gt;
mysql&amp;gt; create database monsite_test;&lt;br /&gt;
mysql&amp;gt; create database monsite_production;&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;aparte&amp;quot;&amp;gt;&lt;br /&gt;
Note : J&#039;en ai crée 3 pour pouvoir utiliser 3 environnements différents. Une seule peut suffir, ca dépend de ce que vous voulez faire.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous allons ensuite éditer ./config/database.yml. Vous avez 3 environnements de pré-configurées de la sorte : &lt;br /&gt;
&amp;lt;code&amp;gt;production:&lt;br /&gt;
  adapter: mysql&lt;br /&gt;
  database: monsite_production&lt;br /&gt;
  username: root&lt;br /&gt;
  password:&lt;br /&gt;
  host: localhost&amp;lt;/code&amp;gt;&lt;br /&gt;
Editez-le en fonction des paramètres de votre base de donnée&lt;br /&gt;
&amp;lt;code&amp;gt;production:&lt;br /&gt;
  adapter: mysql&lt;br /&gt;
  database: monsite_production&lt;br /&gt;
  username: gedsismik&lt;br /&gt;
  password: mypassord&lt;br /&gt;
  host: localhost&lt;br /&gt;
  socket: /var/run/mysql/mysql.sock&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;aparte&amp;quot;&amp;gt;&lt;br /&gt;
Note : Sous Slackware, j&#039;ai du ajouter la ligne &amp;lt;code&amp;gt;socket: /var/run/mysql/mysql.sock&amp;lt;/code&amp;gt; sinon il ne trouve pas la socket MySQL.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Modèle MVC ==&lt;br /&gt;
&lt;br /&gt;
Ruby On Rails utilise le motif de conception MVC (modèle-vue-contrôleur). Je m&#039;explique : dans un projet RoR, vous séparez :&lt;br /&gt;
 - les modèles (répertoire &amp;lt;code&amp;gt;./app/models&amp;lt;/code&amp;gt;) : ce qui concerne les données. Dans notre cas, c&#039;est donc principalement les tables des bases de données.&lt;br /&gt;
 - les vues (répertoire &amp;lt;code&amp;gt;./app/views&amp;lt;/code&amp;gt;) : ce qui concerne l&#039;interface. Dans notre cas, il s&#039;agit de la présentation des pages (en HTML et Ruby embarqué, nous verrons ça plus tard).&lt;br /&gt;
 - les contrôleurs (répertoire &amp;lt;code&amp;gt;./app/controllers&amp;lt;/code&amp;gt;) : concerne la gestion des évenements. Dans notre cas, ce sont les classes qui feront le lien entre les tables (models) et le html (views). Ce qui revient aux appels aux tables via les modèles et la création de variables dont le contenu sera affiché dans les vues.&lt;br /&gt;
&lt;br /&gt;
Pour palier à certaines fonctions qui ne peuvent pas suivre le modèle MVC à la lettre, Rails dispose d&#039;une partie appelée helpers (&amp;lt;code&amp;gt;./app/helpers&amp;lt;/code&amp;gt;) qui contient des classes accessibles aux vues et qui contient du code ayant accès aux modèles sans passer par les contrôleurs.&lt;br /&gt;
&lt;br /&gt;
== Création des modèles ==&lt;br /&gt;
&lt;br /&gt;
=== Génération des fichiers relatifs à la table ===&lt;br /&gt;
&lt;br /&gt;
On va utilisez le script &amp;lt;code&amp;gt;./script/generate&amp;lt;/code&amp;gt; pour générer la première table.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;$ ./script/generate model livre&lt;br /&gt;
      exists  app/models/&lt;br /&gt;
      exists  test/unit/&lt;br /&gt;
      exists  test/fixtures/&lt;br /&gt;
      create  app/models/livre.rb&lt;br /&gt;
      create  test/unit/livre_test.rb&lt;br /&gt;
      create  test/fixtures/livres.yml&lt;br /&gt;
      create  db/migrate&lt;br /&gt;
      create  db/migrate/001_create_livres.rb&lt;br /&gt;
$ ./script/generate model auteur&lt;br /&gt;
      exists  app/models/&lt;br /&gt;
      exists  test/unit/&lt;br /&gt;
      exists  test/fixtures/&lt;br /&gt;
      create  app/models/auteur.rb&lt;br /&gt;
      create  test/unit/auteur_test.rb&lt;br /&gt;
      create  test/fixtures/auteurs.yml&lt;br /&gt;
      exists  db/migrate&lt;br /&gt;
      create  db/migrate/002_create_auteurs.rb&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Fichiers de migration ===&lt;br /&gt;
&lt;br /&gt;
Les fichiers de migration/création de table se trouvent dans &amp;lt;code&amp;gt;./db/migrate&amp;lt;/code&amp;gt;. Il va falloir les éditez pour ajoutez les champs que vous voulez.&lt;br /&gt;
&amp;lt;div class=&amp;quot;aparte&amp;quot;&amp;gt;&lt;br /&gt;
Note : ne faites pas de champ &amp;quot;id&amp;quot;, ils sont automatiquement créés et gérer par Rails.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Fichier ./db/migrate/001_create_livres.rb ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;class CreateLivres &amp;lt; ActiveRecord::Migration&lt;br /&gt;
	def self.up&lt;br /&gt;
		create_table :livres do |t|&lt;br /&gt;
			t.column :titre, :string, :null =&amp;gt; false&lt;br /&gt;
			t.column :auteur_id, :integer, :null =&amp;gt; false&lt;br /&gt;
			t.column :quantite, :integer, :default =&amp;gt; &amp;quot;1&amp;quot;&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	def self.down&lt;br /&gt;
		drop_table :livres&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Fichier ./db/migrate/002_create_auteurs.rb ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;class CreateAuteurs &amp;lt; ActiveRecord::Migration&lt;br /&gt;
	def self.up&lt;br /&gt;
		create_table :auteurs do |t|&lt;br /&gt;
			t.column :nom, :string&lt;br /&gt;
			t.column :prenom, :string&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	def self.down&lt;br /&gt;
		drop_table :auteurs&lt;br /&gt;
	end&lt;br /&gt;
end&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;aparte&amp;quot;&amp;gt;Notez que vous pouvez réunir les deux fichiers en un seul :&lt;br /&gt;
./db/migrate/001_initial.rb&lt;br /&gt;
&amp;lt;code&amp;gt;class Initial &amp;lt; ActiveRecord::Migration&lt;br /&gt;
	def self.up&lt;br /&gt;
		create_table :livres do |t|&lt;br /&gt;
			t.column :titre, :string, :null =&amp;gt; false&lt;br /&gt;
			t.column :auteur_id, :integer, :null =&amp;gt; false&lt;br /&gt;
			t.column :quantite, :integer, :default =&amp;gt; &amp;quot;1&amp;quot;&lt;br /&gt;
		end&lt;br /&gt;
		create_table :auteurs do |t|&lt;br /&gt;
			t.column :nom, :string, :null =&amp;gt; false&lt;br /&gt;
			t.column :prenom, :string&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	def self.down&lt;br /&gt;
		drop_table :livres&lt;br /&gt;
		drop_table :auteurs&lt;br /&gt;
	end&lt;br /&gt;
end&amp;lt;/code&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Génération des tables ===&lt;br /&gt;
&lt;br /&gt;
Toujours dans le repertoire monsite, exécutez &amp;lt;code&amp;gt;rake migrate&amp;lt;/code&amp;gt;.&lt;br /&gt;
&amp;lt;code&amp;gt;$ rake migrate&lt;br /&gt;
(in /home/gedsismik/monsite)&lt;br /&gt;
== CreateLivres: migrating ====================================================&lt;br /&gt;
-- create_table(:livres)&lt;br /&gt;
   -&amp;gt; 0.0441s&lt;br /&gt;
== CreateLivres: migrated (0.0442s) ===========================================&lt;br /&gt;
&lt;br /&gt;
== CreateAuteurs: migrating ===================================================&lt;br /&gt;
-- create_table(:auteurs)&lt;br /&gt;
   -&amp;gt; 0.0457s&lt;br /&gt;
== CreateAuteurs: migrated (0.0458s) ==========================================&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Si vous regardez dans votre base de donnée, vous trouverez donc 3 tables :&lt;br /&gt;
 - auteurs&lt;br /&gt;
 - livres&lt;br /&gt;
 - schema_info&lt;br /&gt;
&lt;br /&gt;
Cette dernière table contient en fait la version de la base de donnée. Les versions sont incrémentées lors du &amp;lt;code&amp;gt;./script/generate model &amp;lt;nom table&amp;gt;&amp;lt;/code&amp;gt; et sont contenus dans le nom du fichier &amp;lt;code&amp;gt;./db/migrate/001_initial.rb&amp;lt;/code&amp;gt; est donc la version 1 de la base.&lt;br /&gt;
&lt;br /&gt;
=== Edition des modèles ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Création du/des controleur(s) ==&lt;br /&gt;
&lt;br /&gt;
== Mise en place des vues ==&lt;/div&gt;</summary>
		<author><name>Gedsismik</name></author>
	</entry>
	<entry>
		<id>https://lea-linux.org/docs/index.php?title=NFS&amp;diff=13097</id>
		<title>NFS</title>
		<link rel="alternate" type="text/html" href="https://lea-linux.org/docs/index.php?title=NFS&amp;diff=13097"/>
		<updated>2006-07-19T07:55:43Z</updated>

		<summary type="html">&lt;p&gt;Gedsismik : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Partager ses fichiers]]&lt;br /&gt;
= Installation d&#039;un serveur NFS =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;leatitre&amp;quot;&amp;gt;Installation d&#039;un serveur NFS&amp;lt;/div&amp;gt;&amp;lt;div class=&amp;quot;leapar&amp;quot;&amp;gt;Guillaume Pierronnet&amp;lt;/div&amp;gt;&amp;lt;div class=&amp;quot;leadesc&amp;quot;&amp;gt;NFS, ou le partage des ressources selon Unix.&amp;lt;/div&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Introduction ==&lt;br /&gt;
&lt;br /&gt;
NFS signifie Network File System. C&#039;est, comme son nom l&#039;indique, un système de fichiers en réseau qui permet de partager ses données principalement entre systèmes UNIX. À la différence de SAMBA, NFS gère les permissions sur les fichiers et on peut donc l&#039;utiliser de manière totalement transparente dans son arborescence Linux.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;ATTENTION !&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Comme toute application réseau, NFS ouvre des trous dans la sécurité du système. Je vous invite donc à consulter les liens à la fin de cet article pour des précisions sur la sécurité ([http://www.linuxselfhelp.com/HOWTO/NFS-HOWTO/security.html celui-ci], en anglais, indique quelques règles à suivre, en parallèle des démarches indiquées [http://people.via.ecp.fr/~alexis/formation-linux/nfs.html dans ce guide nfs pour Debian] ou ci-dessous). &amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Les softs ==&lt;br /&gt;
&lt;br /&gt;
=== Les modules du noyau ===&lt;br /&gt;
&lt;br /&gt;
Dans la configuration du noyau, on va dans la section &amp;quot;&#039;&#039;&#039;File systems ---&amp;gt; Network File Systems&#039;&#039;&#039;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;u&amp;gt;Pour le client:&amp;lt;/u&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;NFS file system support et Provide NFSv3 client support&amp;lt;/tt&amp;gt;&lt;br /&gt;
   CONFIG_NFS_FS=y ou m&lt;br /&gt;
   CONFIG_NFS_V3=y&lt;br /&gt;
* &amp;lt;u&amp;gt;Pour le serveur:&amp;lt;/u&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&amp;lt;tt&amp;gt;NFS server support et Provide NFSv3 server support&amp;lt;/tt&amp;gt;&lt;br /&gt;
   CONFIG_NFSD=y ou m&lt;br /&gt;
   CONFIG_NFSD_V3=y&lt;br /&gt;
&lt;br /&gt;
À partir du noyau 2.2.18, les modules supportent entièrement la version 3 du protocole ainsi que différentes corrections de bug. &amp;lt;br /&amp;gt;Il serait temps d&#039;upgrader si tu ne l&#039;as pas déjà fait! (profites-en pour passer au 2.4, ce sera réglé :)&lt;br /&gt;
&lt;br /&gt;
=== Les packages ===&lt;br /&gt;
&lt;br /&gt;
Les packages (sur ma Debian) sont :&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tt&amp;gt;nfs-common&amp;lt;/tt&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;nfs-user-server&amp;lt;/tt&amp;gt; pour le serveur.&lt;br /&gt;
&lt;br /&gt;
Tu peux toujours récupérer les sources qui se trouvent sur http://nfs.sourceforge.net/.&lt;br /&gt;
&lt;br /&gt;
On va aussi installer le &#039;&#039;wrapper&#039;&#039; TCP pour un minimum de sécurité. Toujours sur ma Debian, le paquet s&#039;appelle &amp;lt;tt&amp;gt;tcpd&amp;lt;/tt&amp;gt;. Les sources se trouvent [ftp://ftp.porcupine.org/pub/security/index.html ici].&lt;br /&gt;
&lt;br /&gt;
== Le serveur ==&lt;br /&gt;
&lt;br /&gt;
Les 3 fichiers de configuration principaux sont &amp;lt;tt&amp;gt;/etc/exports&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;/etc/hosts.deny&amp;lt;/tt&amp;gt; et &amp;lt;tt&amp;gt;/etc/hosts.allow&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== /etc/exports ===&lt;br /&gt;
&lt;br /&gt;
Le fichier &amp;lt;tt&amp;gt;/etc/exports&amp;lt;/tt&amp;gt; est très simple :&lt;br /&gt;
&lt;br /&gt;
   &amp;lt;tt&amp;gt;répertoire machine1(option11,option12) machine2(option21,option22)&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
par exemple :&lt;br /&gt;
&lt;br /&gt;
   &amp;lt;tt&amp;gt;/home 192.168.0.10(rw) 192.168.0.25(ro)&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
signifie que l&#039;on autorisera la machine &#039;&#039;192.168.0.10&#039;&#039; à accéder à notre répertoire &amp;lt;tt&amp;gt;/home&amp;lt;/tt&amp;gt; en lecture et écriture (&amp;lt;tt&amp;gt;rw&amp;lt;/tt&amp;gt;) ainsi que la machine &#039;&#039;192.168.0.25&#039;&#039; mais uniquement en lecture (&amp;lt;tt&amp;gt;ro&amp;lt;/tt&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tt&amp;gt;&amp;lt;u&amp;gt;répertoire&amp;lt;/u&amp;gt;&amp;lt;/tt&amp;gt; :&amp;lt;br /&amp;gt; le répertoire du serveur à partager.&amp;lt;br /&amp;gt; &lt;br /&gt;
* &amp;lt;tt&amp;gt;&amp;lt;u&amp;gt;machine&amp;lt;/u&amp;gt;&amp;lt;/tt&amp;gt; :&amp;lt;br /&amp;gt; Une liste de machines séparée par des virgules et autorisées à monter ce répertoire (utilisez des adresses IP plutôt que des noms à cause des problèmes de &amp;quot;&#039;&#039;dns spoofing&#039;&#039;&amp;quot;).&amp;lt;br /&amp;gt; &lt;br /&gt;
* &amp;lt;tt&amp;gt;&amp;lt;u&amp;gt;options&amp;lt;/u&amp;gt;&amp;lt;/tt&amp;gt; : &lt;br /&gt;
** &#039;&#039;&#039;ro&#039;&#039;&#039; : &amp;lt;br /&amp;gt;C&#039;est la valeur par défaut, lecture seule.&lt;br /&gt;
** &#039;&#039;&#039;rw&#039;&#039;&#039; : &amp;lt;br /&amp;gt;La machine à un accès en lecture/écriture au répertoire.&lt;br /&gt;
** &#039;&#039;&#039;no_root_squash&#039;&#039;&#039; : &amp;lt;br /&amp;gt;Les accès par l&#039;utilisateur root sur le serveur se font sous l&#039;identité root, au contraire de nobody (par défaut)&amp;lt;br /&amp;gt; À UTILISER AVEC PRÉCAUTION&lt;br /&gt;
** &#039;&#039;&#039;sync&#039;&#039;&#039; : &amp;lt;u&amp;gt;uniquement NFS v2&amp;lt;/u&amp;gt;&amp;lt;br /&amp;gt;Ne diffère pas les écritures physiques au volume, augmente la fiabilité en cas de mauvais démontage. La version 3 dispose d&#039;un mécanisme de &#039;&#039;commit-rollback&#039;&#039; donc cette option n&#039;est pas utile.&lt;br /&gt;
&lt;br /&gt;
Un point important, pour un bon fonctionnement : tu dois avoir les mêmes numéros de groupes et d&#039;utilisateurs sur les deux machines. &amp;lt;br /&amp;gt;Des systèmes permettent de gérer çà, NIS (assez ancien) ou LDAP (plus récent). Avec peu d&#039;utilisateurs, tu peux tout simplement éditer &amp;lt;tt&amp;gt;/etc/group&amp;lt;/tt&amp;gt; et &amp;lt;tt&amp;gt;/etc/passwd&amp;lt;/tt&amp;gt; pour synchroniser ces numéros.&lt;br /&gt;
&lt;br /&gt;
Il n&#039;est pas recommandé d&#039;exporter un système DOS ou VFAT à cause de leurs absences de gestion multi-utilisateurs ; ils ne sont pas fait pour être partagés avec NFS. &amp;lt;br /&amp;gt; &lt;br /&gt;
&lt;br /&gt;
=== /etc/hosts.deny ===&lt;br /&gt;
&lt;br /&gt;
On va interdire toutes les machines qui ne sont pas autorisées explicitement dans le &amp;lt;tt&amp;gt;/etc/hosts.allow&amp;lt;/tt&amp;gt;. &amp;lt;br /&amp;gt;Un bon vieux &amp;quot;&amp;lt;tt&amp;gt;ALL: ALL&amp;lt;/tt&amp;gt;&amp;quot; interdira l&#039;accès à tous les services à partir de toutes les machines. On peut cependant être plus précis en écrivant :&lt;br /&gt;
&lt;br /&gt;
 portmap:ALL&lt;br /&gt;
 lockd:ALL&lt;br /&gt;
 mountd:ALL&lt;br /&gt;
 rquotad:ALL&lt;br /&gt;
 statd:ALL&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
=== /etc/hosts.allow ===&lt;br /&gt;
&lt;br /&gt;
Dans le même esprit que pour le &amp;lt;tt&amp;gt;/etc/hosts.deny&amp;lt;/tt&amp;gt;, ce fichier a l&#039;architecture suivante :&lt;br /&gt;
&lt;br /&gt;
   [service]: [IP de la machine client]&lt;br /&gt;
&lt;br /&gt;
Donc pour autoriser 192.168.1.34 à se connecter à un partage NFS, on écrira :&lt;br /&gt;
&lt;br /&gt;
   portmap:192.168.1.34&lt;br /&gt;
   lockd:192.168.1.34&lt;br /&gt;
   mountd:192.168.1.34&lt;br /&gt;
   rquotad:192.168.1.34&lt;br /&gt;
   statd:192.168.1.34&lt;br /&gt;
&lt;br /&gt;
On va pouvoir lancer les services ; sur ma Debian, je lance :&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;# /etc/init.d/nfs-server start&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pour Slackware, ce serait&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;# /etc/rc.d/rc.nfsd start&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La commande &amp;lt;tt&amp;gt;rpcinfo -p&amp;lt;/tt&amp;gt; permet de vérifier que les services fonctionnent. Elle devrait produire un résultat dans cet esprit :&lt;br /&gt;
&lt;br /&gt;
 cacahuete:~# rpcinfo -p&lt;br /&gt;
  program vers proto   port&lt;br /&gt;
   100000    2   tcp    111  portmapper&lt;br /&gt;
   100000    2   udp    111  portmapper&lt;br /&gt;
   100024    1   udp    737  status&lt;br /&gt;
   100024    1   tcp    739  status&lt;br /&gt;
   100011    1   udp    851  rquotad&lt;br /&gt;
   100011    2   udp    851  rquotad&lt;br /&gt;
   100003    2   udp   2049  nfs&lt;br /&gt;
   100003    2   tcp   2049  nfs&lt;br /&gt;
   100005    1   udp    872  mountd&lt;br /&gt;
   100005    2   udp    872  mountd&lt;br /&gt;
   100005    1   tcp    875  mountd&lt;br /&gt;
   100005    2   tcp    875  mountd&lt;br /&gt;
 cacahuete:~#&lt;br /&gt;
&lt;br /&gt;
Pour recharger les services NFS (par exemple après une modification du fichier de config) :&lt;br /&gt;
&lt;br /&gt;
 cacahuete:~# killall -HUP nfsd&lt;br /&gt;
&lt;br /&gt;
le serveur est prêt ! &amp;lt;br /&amp;gt; &lt;br /&gt;
&lt;br /&gt;
== Le client ==&lt;br /&gt;
&lt;br /&gt;
Pour utiliser NFS v3, il faut au minimum la version 2.10m du programme &amp;lt;tt&amp;gt;mount&amp;lt;/tt&amp;gt;. Pour voir sa version, taper :&lt;br /&gt;
&lt;br /&gt;
 cacahuete:~# mount -V&lt;br /&gt;
 mount: mount-2.11h&lt;br /&gt;
 cacahuete:~#&lt;br /&gt;
&lt;br /&gt;
On va maintenant pouvoir monter notre partage!&lt;br /&gt;
&lt;br /&gt;
 cacahuete:~# mount mon.serveur.nfs:/home /mnt/home&lt;br /&gt;
 cacahuete:~#&lt;br /&gt;
&lt;br /&gt;
En principe tout devrait bien se dérouler.&lt;br /&gt;
&lt;br /&gt;
Pour monter ce partage définitivement à chaque démarrage de la machine, éditons notre &amp;lt;tt&amp;gt;/etc/fstab&amp;lt;/tt&amp;gt;&amp;lt;nowiki&amp;gt;: &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;# device       mountpoint  fs-type options dump fsckorder&lt;br /&gt;
 ...&lt;br /&gt;
 master.foo.com:/home  /mnt nfs     rw      0    0&lt;br /&gt;
 ...&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
== Liens ==&lt;br /&gt;
&lt;br /&gt;
* Cet article est principalement basé sur le [http://www.linuxdoc.org/HOWTO/NFS-HOWTO/index.html NFS howto]&lt;br /&gt;
* Les sources des logiciels NFS sur http://nfs.sourceforge.net/&lt;br /&gt;
* [http://www.linuxdoc.org/HOWTO/LDAP-HOWTO.html LDAP howto]&lt;br /&gt;
* [http://www.linuxdoc.org/HOWTO/NIS-HOWTO.html NIS howto]&lt;br /&gt;
* Va te faire peur sur [http://www.securityfocus.com/ security focus]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;merci&amp;quot;&amp;gt;Cette page est issue de la documentation &#039;pré-wiki&#039; de Léa a été convertie avec HTML::WikiConverter. Elle fut créée par Guillaume Pierronnet le 22/10/2001.&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Copyright =&lt;br /&gt;
Copyright &amp;amp;copy; 22/10/2001, Guillaume Pierronnet&lt;br /&gt;
{{CC-BY-NC-SA}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Autres ressources=&lt;br /&gt;
* Cet article est principalement basé sur le [http://www.linuxdoc.org/HOWTO/NFS-HOWTO/index.html NFS howto]&lt;br /&gt;
* Les sources des logiciels NFS sur http://nfs.sourceforge.net/ &lt;br /&gt;
* [http://en.tldp.org/HOWTO/LDAP-HOWTO/ LDAP howto]&lt;br /&gt;
* [http://www.linuxdoc.org/HOWTO/NIS-HOWTO.html NIS howto]&lt;br /&gt;
* Va te faire peur sur [http://www.securityfocus.com/ security focus]&lt;/div&gt;</summary>
		<author><name>Gedsismik</name></author>
	</entry>
	<entry>
		<id>https://lea-linux.org/docs/index.php?title=Discussion_Lea_Linux:AG_2005&amp;diff=10946</id>
		<title>Discussion Lea Linux:AG 2005</title>
		<link rel="alternate" type="text/html" href="https://lea-linux.org/docs/index.php?title=Discussion_Lea_Linux:AG_2005&amp;diff=10946"/>
		<updated>2005-11-30T20:15:58Z</updated>

		<summary type="html">&lt;p&gt;Gedsismik : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Inscription==&lt;br /&gt;
Liste des inscrits pour l&#039;AG2005 de LéaLinux :&lt;br /&gt;
&lt;br /&gt;
* [[Utilisateur:Ennael|Anne]]  (AG + Confs + Soirée) - 2 personnes&lt;br /&gt;
* [[Utilisateur:Pterjan|CMoi]]  (Confs + Soirée) - 1 personne&lt;br /&gt;
* [[Utilisateur: Hélène|Hélène Dumur]] (AG + Confs + Soirée.. si train possible) - 1 personne&lt;br /&gt;
* [[Utilisateur:Fred|Fred]] (AG + Confs + Soirée ... si hébergement) - 1 personne&lt;br /&gt;
* [[Utilisateur:Gedsismik|GEDsismik]] (Confs - I&#039;m a Misc Fan ;) ) - 1 personne - pas sûr&lt;br /&gt;
* [[Utilisateur:LeaJice|Jice]] (AG + Confs + Soirée) - 1 personne&lt;br /&gt;
* [[Utilisateur:Maston28|Maston28]] (AG + Confs) - 1 personne&lt;br /&gt;
* &amp;lt;strike&amp;gt;[[Utilisateur: Mike-m|Mike M]] (Confs + Soirée ... si sur Paris) - 1 personne&amp;lt;/strike&amp;gt;&lt;br /&gt;
* [[Utilisateur: MsK`|MsK`]] (Confs + Soirée si c&#039;est bon, qu&#039;est-ce qu&#039;on mange ? :) - 1 personne&lt;br /&gt;
* [[Utilisateur: miaouzz32|Pascalc]] (AG + Confs) - 1 personne&lt;br /&gt;
* [[Utilisateur:Philheap|Philheap]]  (AG + Confs + Soirée) - 2 personnes&lt;br /&gt;
* [[Utilisateur:Phlogistique|Noé Rubinstein]] (Confs) - 1 personne - pas sur&lt;br /&gt;
* [[Utilisateur: Misc|Michael Scherer]]  (Confs + Soirée) - 1 personne&lt;br /&gt;
* [[Utilisateur:ST|ST]] (AG + Confs + Soirée) - 1 personne&lt;br /&gt;
* [[Utilisateur: YannTech|Yann Verry]]  (Soirée) - 2 personnes&lt;br /&gt;
* [[Utilisateur: Papyrus|youss]]  (Confs + Soirée) - 1 personne&lt;br /&gt;
* [[Utilisateur:Zragg|Zragg]]  (AG + Confs + Soirée) - 1 personnes&lt;br /&gt;
&lt;br /&gt;
===Assemblée générale===&lt;br /&gt;
11 personnes :&lt;br /&gt;
&lt;br /&gt;
* [[Utilisateur:Ennael|Anne]]  - 2 personnes&lt;br /&gt;
* [[Utilisateur: Hélène|Hélène Dumur]] - 1 personne&lt;br /&gt;
* [[Utilisateur:Fred|Fred]]  - 1 personne&lt;br /&gt;
* [[Utilisateur:LeaJice|Jice]]  - 1 personne&lt;br /&gt;
* [[Utilisateur:Maston28|Maston28]]  - 1 personne&lt;br /&gt;
* [[Utilisateur: miaouzz32|Pascalc]]  - 1 personne&lt;br /&gt;
* [[Utilisateur:Philheap|Philheap]]  - 2 personnes&lt;br /&gt;
* [[Utilisateur:ST|ST]] - 1 personne&lt;br /&gt;
* [[Utilisateur:Zragg|Zragg]]  - 1 personne&lt;br /&gt;
&lt;br /&gt;
===Conférence===&lt;br /&gt;
17 personnes :&lt;br /&gt;
&lt;br /&gt;
* [[Utilisateur:Ennael|Anne]] - 2 personnes&lt;br /&gt;
* [[Utilisateur:Pterjan|CMoi]]  - 1 personne&lt;br /&gt;
* [[Utilisateur: Hélène|Hélène Dumur]] - 1 personne&lt;br /&gt;
* [[Utilisateur:Fred|Fred]] - 1 personne&lt;br /&gt;
* [[Utilisateur:Gedsismik|GEDsismik]]  - 1 personne&lt;br /&gt;
* [[Utilisateur:LeaJice|Jice]]  - 1 personne&lt;br /&gt;
* [[Utilisateur:Maston28|Maston28]]  - 1 personne&lt;br /&gt;
* [[Utilisateur: MsK`|MsK`]]  - 1 personne&lt;br /&gt;
* [[Utilisateur: miaouzz32|Pascalc]] - 1 personne&lt;br /&gt;
* [[Utilisateur:Philheap|Philheap]]  - 2 personnes&lt;br /&gt;
* [[Utilisateur:Phlogistique|Noé Rubinstein]]  - 1 personne&lt;br /&gt;
* [[Utilisateur: Misc|Michael Scherer]] - 1 personne&lt;br /&gt;
* [[Utilisateur:ST|ST]]  - 1 personne&lt;br /&gt;
* [[Utilisateur: Papyrus|youss]]  - 1 personne&lt;br /&gt;
* [[Utilisateur:Zragg|Zragg]]  - 1 personnes&lt;br /&gt;
&lt;br /&gt;
===Soirée===&lt;br /&gt;
16 personnes&lt;br /&gt;
&lt;br /&gt;
* [[Utilisateur:Ennael|Anne]]  - 2 personnes&lt;br /&gt;
* [[Utilisateur:Pterjan|CMoi]]  - 1 personne&lt;br /&gt;
* [[Utilisateur: Hélène|Hélène Dumur]]  - 1 personne&lt;br /&gt;
* [[Utilisateur:Fred|Fred]]  - 1 personne&lt;br /&gt;
* [[Utilisateur:LeaJice|Jice]] - 1 personne&lt;br /&gt;
* [[Utilisateur:Maston28|Maston28]]  - 1 personne&lt;br /&gt;
* [[Utilisateur: MsK`|MsK`]]  - 1 personne&lt;br /&gt;
* [[Utilisateur:Philheap|Philheap]]  - 2 personnes&lt;br /&gt;
* [[Utilisateur: Misc|Michael Scherer]]  - 1 personne&lt;br /&gt;
* [[Utilisateur:ST|ST]] - 1 personne&lt;br /&gt;
* [[Utilisateur: YannTech|Yann Verry]]  - 2 personnes&lt;br /&gt;
* [[Utilisateur: Papyrus|youss]]  - 1 personne&lt;br /&gt;
* [[Utilisateur:Zragg|Zragg]]  - 1 personnes&lt;/div&gt;</summary>
		<author><name>Gedsismik</name></author>
	</entry>
	<entry>
		<id>https://lea-linux.org/docs/index.php?title=Discussion_Lea_Linux:AG_2005&amp;diff=10908</id>
		<title>Discussion Lea Linux:AG 2005</title>
		<link rel="alternate" type="text/html" href="https://lea-linux.org/docs/index.php?title=Discussion_Lea_Linux:AG_2005&amp;diff=10908"/>
		<updated>2005-11-28T23:36:57Z</updated>

		<summary type="html">&lt;p&gt;Gedsismik : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Inscription==&lt;br /&gt;
Liste des inscrits pour l&#039;AG2005 de LéaLinux :&lt;br /&gt;
&lt;br /&gt;
* [[Utilisateur:Ennael|Anne]]  (AG + Confs + Soirée) - 2 personnes&lt;br /&gt;
* [[Utilisateur:Pterjan|CMoi]]  (Confs + Soirée) - 1 personne&lt;br /&gt;
* [[Utilisateur: Hélène|Hélène Dumur]] (AG + Confs + Soirée.. si train possible) - 1 personne&lt;br /&gt;
* [[Utilisateur:Fred|Fred]] (AG + Confs + Soirée ... si hébergement) - 1 personne&lt;br /&gt;
* [[Utilisateur:Gedsismik|GEDsismik]] (Confs - I&#039;m a Misc Fan ;) ) - 1 personne&lt;br /&gt;
* [[Utilisateur:LeaJice|Jice]] (AG + Confs + Soirée) - 1 personne&lt;br /&gt;
* [[Utilisateur:Maston28|Maston28]] (AG + Confs + Soirée) - 1 personne&lt;br /&gt;
* &amp;lt;strike&amp;gt;[[Utilisateur: Mike-m|Mike M]] (Confs + Soirée ... si sur Paris) - 1 personne&amp;lt;/strike&amp;gt;&lt;br /&gt;
* [[Utilisateur: MsK`|MsK`]] (Confs + Soirée si c&#039;est bon, qu&#039;est-ce qu&#039;on mange ? :) - 1 personne&lt;br /&gt;
* [[Utilisateur: miaouzz32|Pascalc]] (AG + Confs) - 1 personne&lt;br /&gt;
* [[Utilisateur:Philheap|Philheap]]  (AG + Confs + Soirée) - 2 personnes&lt;br /&gt;
* [[Utilisateur:Phlogistique|Noé Rubinstein]] (Confs) - 1 personne - pas sur&lt;br /&gt;
* [[Utilisateur: Misc|Michael Scherer]]  (Confs + Soirée) - 1 personne&lt;br /&gt;
* [[Utilisateur:ST|ST]] (AG + Confs + Soirée) - 1 personne&lt;br /&gt;
* [[Utilisateur: YannTech|Yann Verry]]  (Soirée) - 2 personnes&lt;br /&gt;
* [[Utilisateur: Papyrus|youss]]  (Confs + Soirée) - 1 personne&lt;br /&gt;
* [[Utilisateur:Zragg|Zragg]]  (AG + Confs + Soirée) - 1 personnes&lt;br /&gt;
&lt;br /&gt;
===Assemblée générale===&lt;br /&gt;
11 personnes :&lt;br /&gt;
&lt;br /&gt;
* [[Utilisateur:Ennael|Anne]]  - 2 personnes&lt;br /&gt;
* [[Utilisateur: Hélène|Hélène Dumur]] - 1 personne&lt;br /&gt;
* [[Utilisateur:Fred|Fred]]  - 1 personne&lt;br /&gt;
* [[Utilisateur:LeaJice|Jice]]  - 1 personne&lt;br /&gt;
* [[Utilisateur:Maston28|Maston28]]  - 1 personne&lt;br /&gt;
* [[Utilisateur: miaouzz32|Pascalc]]  - 1 personne&lt;br /&gt;
* [[Utilisateur:Philheap|Philheap]]  - 2 personnes&lt;br /&gt;
* [[Utilisateur:ST|ST]] - 1 personne&lt;br /&gt;
* [[Utilisateur:Zragg|Zragg]]  - 1 personne&lt;br /&gt;
&lt;br /&gt;
===Conférence===&lt;br /&gt;
17 personnes :&lt;br /&gt;
&lt;br /&gt;
* [[Utilisateur:Ennael|Anne]] - 2 personnes&lt;br /&gt;
* [[Utilisateur:Pterjan|CMoi]]  - 1 personne&lt;br /&gt;
* [[Utilisateur: Hélène|Hélène Dumur]] - 1 personne&lt;br /&gt;
* [[Utilisateur:Fred|Fred]] - 1 personne&lt;br /&gt;
* [[Utilisateur:Gedsismik|GEDsismik]]  - 1 personne&lt;br /&gt;
* [[Utilisateur:LeaJice|Jice]]  - 1 personne&lt;br /&gt;
* [[Utilisateur:Maston28|Maston28]]  - 1 personne&lt;br /&gt;
* [[Utilisateur: MsK`|MsK`]]  - 1 personne&lt;br /&gt;
* [[Utilisateur: miaouzz32|Pascalc]] - 1 personne&lt;br /&gt;
* [[Utilisateur:Philheap|Philheap]]  - 2 personnes&lt;br /&gt;
* [[Utilisateur:Phlogistique|Noé Rubinstein]]  - 1 personne&lt;br /&gt;
* [[Utilisateur: Misc|Michael Scherer]] - 1 personne&lt;br /&gt;
* [[Utilisateur:ST|ST]]  - 1 personne&lt;br /&gt;
* [[Utilisateur: Papyrus|youss]]  - 1 personne&lt;br /&gt;
* [[Utilisateur:Zragg|Zragg]]  - 1 personnes&lt;br /&gt;
&lt;br /&gt;
===Soirée===&lt;br /&gt;
16 personnes&lt;br /&gt;
&lt;br /&gt;
* [[Utilisateur:Ennael|Anne]]  - 2 personnes&lt;br /&gt;
* [[Utilisateur:Pterjan|CMoi]]  - 1 personne&lt;br /&gt;
* [[Utilisateur: Hélène|Hélène Dumur]]  - 1 personne&lt;br /&gt;
* [[Utilisateur:Fred|Fred]]  - 1 personne&lt;br /&gt;
* [[Utilisateur:LeaJice|Jice]] - 1 personne&lt;br /&gt;
* [[Utilisateur:Maston28|Maston28]]  - 1 personne&lt;br /&gt;
* [[Utilisateur: MsK`|MsK`]]  - 1 personne&lt;br /&gt;
* [[Utilisateur:Philheap|Philheap]]  - 2 personnes&lt;br /&gt;
* [[Utilisateur: Misc|Michael Scherer]]  - 1 personne&lt;br /&gt;
* [[Utilisateur:ST|ST]] - 1 personne&lt;br /&gt;
* [[Utilisateur: YannTech|Yann Verry]]  - 2 personnes&lt;br /&gt;
* [[Utilisateur: Papyrus|youss]]  - 1 personne&lt;br /&gt;
* [[Utilisateur:Zragg|Zragg]]  - 1 personnes&lt;/div&gt;</summary>
		<author><name>Gedsismik</name></author>
	</entry>
	<entry>
		<id>https://lea-linux.org/docs/index.php?title=Discussion_Lea_Linux:AG_2005&amp;diff=10907</id>
		<title>Discussion Lea Linux:AG 2005</title>
		<link rel="alternate" type="text/html" href="https://lea-linux.org/docs/index.php?title=Discussion_Lea_Linux:AG_2005&amp;diff=10907"/>
		<updated>2005-11-28T23:07:07Z</updated>

		<summary type="html">&lt;p&gt;Gedsismik : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* [[Utilisateur:Ennael|Anne]]  (AG + Confs + Soirée) - 2 personnes&lt;br /&gt;
* [[Utilisateur:Pterjan|CMoi]]  (Confs + Soirée) - 1 personne&lt;br /&gt;
* [[Utilisateur: Hélène|Hélène Dumur]] (AG + Confs + Soirée.. si train possible) - 1 personne&lt;br /&gt;
* [[Utilisateur:Fred|Fred]] (AG + Confs + Soirée ... si hébergement) - 1 personne&lt;br /&gt;
* [[Utilisateur:Gedsismik|GEDsismik]] (Confs - I&#039;m a Misc Fan ;) ) - 1 personne&lt;br /&gt;
* [[Utilisateur:LeaJice|Jice]] (AG + Confs + Soirée) - 1 personne&lt;br /&gt;
* [[Utilisateur:Maston28|Maston28]] (AG + Confs + Soirée) - 1 personne&lt;br /&gt;
* &amp;lt;strike&amp;gt;[[Utilisateur: Mike-m|Mike M]] (Confs + Soirée ... si sur Paris) - 1 personne&amp;lt;/strike&amp;gt;&lt;br /&gt;
* [[Utilisateur: MsK`|MsK`]] (Confs + Soirée si c&#039;est bon, qu&#039;est-ce qu&#039;on mange ? :) - 1 personne&lt;br /&gt;
* [[Utilisateur: Papyrus|youss]]  (Confs + Soirée) - 1 personne&lt;br /&gt;
* [[Utilisateur: miaouzz32|Pascalc]] (AG + Confs) - 1 personne&lt;br /&gt;
* [[Utilisateur:Philheap|Philheap]]  (AG + Confs + Soirée) - 2 personnes&lt;br /&gt;
* [[Utilisateur:Phlogistique|Noé Rubinstein]] (Confs) - 1 personne - pas sur&lt;br /&gt;
* [[Utilisateur: Misc|Michael Scherer]]  (Confs + Soirée) - 1 personne&lt;br /&gt;
* [[Utilisateur:ST|ST]] (AG + Confs + Soirée) - 1 personne&lt;br /&gt;
* [[Utilisateur: YannTech|Yann Verry]]  (Soirée) - 2 personnes&lt;br /&gt;
* [[Utilisateur:Zragg|Zragg]]  (AG + Confs + Soirée) - 1 personnes&lt;/div&gt;</summary>
		<author><name>Gedsismik</name></author>
	</entry>
	<entry>
		<id>https://lea-linux.org/docs/index.php?title=Python&amp;diff=10293</id>
		<title>Python</title>
		<link rel="alternate" type="text/html" href="https://lea-linux.org/docs/index.php?title=Python&amp;diff=10293"/>
		<updated>2005-10-31T01:06:31Z</updated>

		<summary type="html">&lt;p&gt;Gedsismik : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Développer sous Linux]]&lt;br /&gt;
= Python =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;leatitre&amp;quot;&amp;gt;Python&amp;lt;/div&amp;gt;&amp;lt;div class=&amp;quot;leapar&amp;quot;&amp;gt;par  [mailto:gedsismik@free.fr GEDsismik]&amp;lt;/div&amp;gt;&amp;lt;div class=&amp;quot;leadesc&amp;quot;&amp;gt;Introduction à Python.&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Présentation ==&lt;br /&gt;
&lt;br /&gt;
Python est un langage orienté objet interprété prenant de plus en plus d&#039;importance ces dernières années. Parmi les nombreuses particularités syntaxiques, nous noterons que ce langage utilise l&#039;identation plutot que des accolades pour les blocs d&#039;instructions et que les variables ne sont pas typés explicitement.&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
&lt;br /&gt;
Vérifiez tout d&#039;abord si Python est déjà installé. Pour cela, tapez &amp;lt;code&amp;gt;python -V&amp;lt;/code&amp;gt; dans une console. Si l&#039;interpreteur Python est installé, vous obtiendez un message du genre :&lt;br /&gt;
&amp;lt;code multi&amp;gt;&lt;br /&gt;
$ python -V &lt;br /&gt;
Python 2.4.2&lt;br /&gt;
&amp;lt;/code&amp;gt; &lt;br /&gt;
Si il n&#039;est pas installé, vous obtiendrez un message du genre :&lt;br /&gt;
&amp;lt;code multi&amp;gt;&lt;br /&gt;
$ python -V &lt;br /&gt;
bash: python: command not found&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Installation à l&#039;aide de paquetage... ===&lt;br /&gt;
Pour installer Python, vous pouvez utiliser le système de paquetage de votre distribution GNU/Linux préféré :&lt;br /&gt;
* Debian : &amp;lt;code&amp;gt;apt-get install python&amp;lt;/code&amp;gt;&lt;br /&gt;
* Fedeora : &amp;lt;code&amp;gt;yum install python&amp;lt;/code&amp;gt;&lt;br /&gt;
* Mandriva : &amp;lt;code&amp;gt; urpmi python&amp;lt;/code&amp;gt;&lt;br /&gt;
* Slackware : &amp;lt;code&amp;gt;swaret --install python&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== ... ou compilation ===&lt;br /&gt;
Sinon, vous pouvez opter pour la compilation. Python étant libre, vous trouverez ses sources sur http://www.python.org. Une fois le paquetage récupéré, vous pourrez le compiler à l&#039;aide de la méthode habituelle :&lt;br /&gt;
&amp;lt;code multi&amp;gt;&lt;br /&gt;
$ tar -zxvf python-2.4.2.tgz&lt;br /&gt;
$ cd python-2.4.2&lt;br /&gt;
$ ./configure&lt;br /&gt;
$ make&lt;br /&gt;
$ su&lt;br /&gt;
# make install&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Script de base ==&lt;br /&gt;
Vous allez maintenant découvrir votre première instruction :&lt;br /&gt;
Pour écrire un message, on utilise : &amp;lt;code&amp;gt;print &amp;quot;Avec votre texte entre guillemets&amp;quot;&amp;lt;/code&amp;gt;. &lt;br /&gt;
On teste ? Tapez donc dans un éditeur : &lt;br /&gt;
&amp;lt;div class=code&amp;gt;print &amp;quot;Vive le python !&amp;quot;&amp;lt;/div&amp;gt;&lt;br /&gt;
Enregistrez-le au format texte brut (par défaut normalement) suivi de l&#039;extension py. Je l&#039;appellerais hello.py personnellement. Pour exécuter&lt;br /&gt;
un script python, on utilise python (nan, sans dec&#039; ?). Dans notre exemple, on fait donc :&lt;br /&gt;
&amp;lt;div class=&#039;code&#039;&amp;gt;bash$ python hello.py&amp;lt;br&amp;gt;&lt;br /&gt;
Vive le python !&amp;lt;/div&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Et vala ! Ca marche !&lt;br /&gt;
&amp;lt;div class=note&amp;gt;&amp;lt;b&amp;gt;Note :&amp;lt;/b&amp;gt; Il est pratique de commencer un script (quelque soit le langage) par le chemin de l&#039;interpreteur (&amp;lt;code&amp;gt;#!/usr/bin/python&amp;lt;/code&amp;gt;) et le codage (&amp;lt;code&amp;gt;# -*- coding: utf-8 -*-&amp;lt;/code&amp;gt;) :&lt;br /&gt;
&amp;lt;div class=code&amp;gt;&lt;br /&gt;
&amp;lt;div class=comment&amp;gt;#!/usr/bin/python&amp;lt;br&amp;gt;# -*- coding: utf-8 -*-&amp;lt;/div&amp;gt;print &amp;quot;Vive le python !&amp;quot;&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Ca permet notamment de pouvoir lancer directement le script (en ayant prit soit de vérifier les permissions d&#039;execution) : &lt;br /&gt;
&amp;lt;div class=&#039;code&#039;&amp;gt;bash$ ./hello.py&amp;lt;br&amp;gt;&lt;br /&gt;
Vive le python !&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=note&amp;gt;&amp;lt;b&amp;gt;Note 2 :&amp;lt;/b&amp;gt; A cette étape du document, assurez-vous de mettre toutes les lignes du script au même niveau (à la même identation).&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== L&#039;interpreteur ==&lt;br /&gt;
Plutôt qu&#039;enregistrer votre script dans un fichier, vous pouvez lancer directement &amp;lt;code&amp;gt;python&amp;lt;/code&amp;gt; et taper&lt;br /&gt;
vos commandes. Tout se déroule &amp;quot;en direct&amp;quot;. C&#039;est pratique pour tester une commande mais quand vous avez tout un code, c&#039;est pas génial vu que ce n&#039;est pas réutilisable.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&#039;code&#039;&amp;gt;&lt;br /&gt;
bash$ python  &amp;lt;br&amp;gt;&lt;br /&gt;
Python 2.4.1 (#1, Apr 10 2005, 22:30:36) &amp;lt;br&amp;gt;&lt;br /&gt;
[GCC 3.3.5] on linux2&amp;lt;br&amp;gt;&lt;br /&gt;
Type &amp;quot;help&amp;quot;, &amp;quot;copyright&amp;quot;, &amp;quot;credits&amp;quot; or &amp;quot;license&amp;quot; for more information.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;amp;gt;&amp;amp;gt;&amp;amp;gt; print &amp;quot;Vive les chips !&amp;quot;&amp;lt;br&amp;gt;&lt;br /&gt;
Vive les chips !&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;amp;gt;&amp;amp;gt;&amp;amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Commentaires ==&lt;br /&gt;
Il vous est possible d&#039;ajouter à tout moment votre script un commentaire. Ce commentaire ne sera pas pris en compte par l&#039;interpreteur mais vous servira éventuellement à vous organiser dans votre programme (notamment si celui-ci prend de l&#039;ampleur). Le commentaire se note ainsi :&lt;br /&gt;
&amp;lt;div class=&#039;code&#039;&amp;gt;&amp;lt;div class=comment&amp;gt;# Vos commentaires&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Variables ==&lt;br /&gt;
Les variables sont &amp;quot;faiblement typées&amp;quot; en Python. C&#039;est-à-dire qu&#039;elles ont un type mais il n&#039;est pas forcement connu et leur déclaration n&#039;est pas stricte. Je m&#039;explique : il n&#039;y a pas de déclaration des variables (contrairement à la plupart des langages). Exemple : on peut taper directement &amp;lt;code&amp;gt;x=3&amp;lt;/code&amp;gt; et x sera un entier de valeur 3.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Les principaux types sont : réel, entier et chaine de caractère.&lt;br /&gt;
&amp;lt;div class=&#039;code&#039;&amp;gt;&lt;br /&gt;
&amp;lt;div class=comment&amp;gt;#!/usr/bin/python&amp;lt;br&amp;gt;&lt;br /&gt;
# x est un entier&amp;lt;/div&amp;gt;&lt;br /&gt;
x=2&lt;br /&gt;
&amp;lt;div class=comment&amp;gt;# i est un réel&amp;lt;/div&amp;gt;&lt;br /&gt;
i=2.0&lt;br /&gt;
&amp;lt;div class=comment&amp;gt;# bibi est une chaine de caractère&amp;lt;/div&amp;gt;&lt;br /&gt;
bibi=&amp;quot;Vive les chips&amp;quot;&lt;br /&gt;
&amp;lt;div class=comment&amp;gt;# on affiche tout le monde&amp;lt;/div&amp;gt;&lt;br /&gt;
print &amp;quot;x vaut &amp;quot;, x&amp;lt;br&amp;gt;&lt;br /&gt;
print &amp;quot;i vaut &amp;quot;, i&amp;lt;br&amp;gt;&lt;br /&gt;
print &amp;quot;bibi = &amp;quot;, bibi&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ce qui donne :&lt;br /&gt;
&amp;lt;div class=&#039;code&#039;&amp;gt;&lt;br /&gt;
bash-3.00$ python test_var.py&amp;lt;br&amp;gt;&lt;br /&gt;
x vaut  2&amp;lt;br&amp;gt;&lt;br /&gt;
i vaut  2.0&amp;lt;br&amp;gt;&lt;br /&gt;
bibi =  Vive les chips&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Opérations (entier/réel) ===&lt;br /&gt;
&lt;br /&gt;
Les 4 opérations de base sont :&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;b&amp;gt;+&amp;lt;/b&amp;gt; l&#039;addition&lt;br /&gt;
* &amp;lt;b&amp;gt;-&amp;lt;/b&amp;gt; la soustraction&lt;br /&gt;
* &amp;lt;b&amp;gt;*&amp;lt;/b&amp;gt; la multiplication&lt;br /&gt;
* &amp;lt;b&amp;gt;/&amp;lt;/b&amp;gt; la division&lt;br /&gt;
&lt;br /&gt;
Oui, je sais, ca parait con mais faut le préciser.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Des opérations entre entiers donne des entiers.&amp;lt;br&amp;gt;&lt;br /&gt;
Des opérations entre réels donne des réels.&amp;lt;br&amp;gt;&lt;br /&gt;
Des opérations entre entier et réel donne des réels.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&#039;code&#039;&amp;gt;&lt;br /&gt;
&amp;lt;div class=comment&amp;gt;#!/usr/bin/python&amp;lt;br&amp;gt;&lt;br /&gt;
 # -*- coding: utf-8 -*-&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 # on prend 4 variables&amp;lt;/div&amp;gt;&lt;br /&gt;
x=2.0&amp;lt;br&amp;gt;&lt;br /&gt;
y=3.0&amp;lt;br&amp;gt;&lt;br /&gt;
a=5&amp;lt;br&amp;gt;&lt;br /&gt;
b=2&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;div class=comment&amp;gt;# on affiche leurs types&amp;lt;/div&amp;gt;&lt;br /&gt;
print type(x)&amp;lt;br&amp;gt;&lt;br /&gt;
print type(y)&amp;lt;br&amp;gt;&lt;br /&gt;
print type(a)&amp;lt;br&amp;gt;&lt;br /&gt;
print type(b)&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
c=a+b&amp;lt;br&amp;gt;&lt;br /&gt;
d=x*a&amp;lt;br&amp;gt;&lt;br /&gt;
x=x*y&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
print &amp;quot;c vaut &amp;quot;, c, &amp;quot; et est de type&amp;quot;, type(c)&amp;lt;br&amp;gt;&lt;br /&gt;
print &amp;quot;d vaut &amp;quot;, d, &amp;quot; et est de type&amp;quot;, type(d)&amp;lt;br&amp;gt;&lt;br /&gt;
print &amp;quot;x vaut maintenant &amp;quot;, x ,&amp;quot; et est de type&amp;quot;, type(x)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=note&amp;gt;&amp;lt;b&amp;gt;Note : &amp;lt;/b&amp;gt; &amp;lt;code&amp;gt;type(&amp;lt;i&amp;gt;var&amp;lt;/i&amp;gt;)&amp;lt;/code&amp;gt; revoit le type d&#039;une variable&amp;lt;/div&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ce qui renvoit :&lt;br /&gt;
&amp;lt;div class=&#039;code&#039;&amp;gt;&lt;br /&gt;
bash-3.00$ python test_type.py &lt;br /&gt;
 &amp;lt;type &#039;float&#039;&amp;gt;&lt;br /&gt;
 &amp;amp;lt;type &#039;float&#039;&amp;amp;gt;&lt;br /&gt;
 &amp;amp;lt;type &#039;int&#039;&amp;amp;gt;&lt;br /&gt;
 &amp;amp;lt;type &#039;int&#039;&amp;amp;gt;&lt;br /&gt;
c vaut  7  et est de type &amp;amp;lt;type &#039;int&#039;&amp;amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
d vaut  10.0  et est de type &amp;amp;lt;type &#039;float&#039;&amp;amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
x vaut maintenant  6.0  et est de type &amp;amp;lt;type &#039;float&#039;&amp;amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=note&amp;gt;&amp;lt;b&amp;gt;Note : &amp;lt;/b&amp;gt; &amp;lt;code&amp;gt;int&amp;lt;/code&amp;gt; (integer) signifie entier et &amp;lt;code&amp;gt;float&amp;lt;/code&amp;gt; (flottant) signifie réel &amp;lt;/div&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Copy|2005|GEDsismik|CC-BY-SA}}&lt;/div&gt;</summary>
		<author><name>Gedsismik</name></author>
	</entry>
	<entry>
		<id>https://lea-linux.org/docs/index.php?title=Python&amp;diff=10292</id>
		<title>Python</title>
		<link rel="alternate" type="text/html" href="https://lea-linux.org/docs/index.php?title=Python&amp;diff=10292"/>
		<updated>2005-10-31T00:56:25Z</updated>

		<summary type="html">&lt;p&gt;Gedsismik : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Développer sous Linux]]&lt;br /&gt;
= Python =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;leatitre&amp;quot;&amp;gt;Python&amp;lt;/div&amp;gt;&amp;lt;div class=&amp;quot;leapar&amp;quot;&amp;gt;par  [mailto:gedsismik@free.fr GEDsismik]&amp;lt;/div&amp;gt;&amp;lt;div class=&amp;quot;leadesc&amp;quot;&amp;gt;Introduction à Python.&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Présentation ==&lt;br /&gt;
&lt;br /&gt;
Python est un langage orienté objet interprété prenant de plus en plus d&#039;importance ces dernières années. Parmi les nombreuses particularités syntaxiques, nous noterons que ce langage utilise l&#039;identation plutot que des accolades pour les blocs d&#039;instructions et que les variables ne sont pas typés explicitement.&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
&lt;br /&gt;
Vérifiez tout d&#039;abord si Python est déjà installé. Pour cela, tapez &amp;lt;code&amp;gt;python -V&amp;lt;/code&amp;gt; dans une console. Si l&#039;interpreteur Python est installé, vous obtiendez un message du genre :&lt;br /&gt;
&amp;lt;code multi&amp;gt;&lt;br /&gt;
$ python -V &lt;br /&gt;
Python 2.4.2&lt;br /&gt;
&amp;lt;/code&amp;gt; &lt;br /&gt;
Si il n&#039;est pas installé, vous obtiendrez un message du genre :&lt;br /&gt;
&amp;lt;code multi&amp;gt;&lt;br /&gt;
$ python -V &lt;br /&gt;
bash: python: command not found&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Installation à l&#039;aide de paquetage... ===&lt;br /&gt;
Pour installer Python, vous pouvez utiliser le système de paquetage de votre distribution GNU/Linux préféré :&lt;br /&gt;
* Debian : &amp;lt;code&amp;gt;apt-get install python&amp;lt;/code&amp;gt;&lt;br /&gt;
* Fedeora : &amp;lt;code&amp;gt;yum install python&amp;lt;/code&amp;gt;&lt;br /&gt;
* Mandriva : &amp;lt;code&amp;gt; urpmi python&amp;lt;/code&amp;gt;&lt;br /&gt;
* Slackware : &amp;lt;code&amp;gt;swaret --install python&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== ... ou compilation ===&lt;br /&gt;
Sinon, vous pouvez opter pour la compilation. Python étant libre, vous trouverez ses sources sur http://www.python.org. Une fois le paquetage récupéré, vous pourrez le compiler à l&#039;aide de la méthode habituelle :&lt;br /&gt;
&amp;lt;code multi&amp;gt;&lt;br /&gt;
$ tar -zxvf python-2.4.2.tgz&lt;br /&gt;
$ cd python-2.4.2&lt;br /&gt;
$ ./configure&lt;br /&gt;
$ make&lt;br /&gt;
$ su&lt;br /&gt;
# make install&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Script de base ==&lt;br /&gt;
Vous allez maintenant découvrir votre première instruction :&lt;br /&gt;
Pour écrire un message, on utilise : &amp;lt;code&amp;gt;print &amp;quot;Avec votre texte entre guillemets&amp;quot;&amp;lt;/code&amp;gt;. &lt;br /&gt;
On teste ? Tapez donc dans un éditeur : &lt;br /&gt;
&amp;lt;div class=code&amp;gt;print &amp;quot;Vive le python !&amp;quot;&amp;lt;/div&amp;gt;&lt;br /&gt;
Enregistrez-le au format texte brut (par défaut normalement) suivi de l&#039;extension py. Je l&#039;appellerais hello.py personnellement. Pour exécuter&lt;br /&gt;
un script python, on utilise python (nan, sans dec&#039; ?). Dans notre exemple, on fait donc :&lt;br /&gt;
&amp;lt;div class=&#039;code&#039;&amp;gt;bash$ python hello.py&amp;lt;br&amp;gt;&lt;br /&gt;
Vive le python !&amp;lt;/div&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Et vala ! Ca marche !&lt;br /&gt;
&amp;lt;div class=note&amp;gt;&amp;lt;b&amp;gt;Note :&amp;lt;/b&amp;gt; Il est pratique de commencer un script (quelque soit le langage) par le chemin de l&#039;interpreteur (&amp;lt;code&amp;gt;#!/usr/bin/python&amp;lt;/code&amp;gt;) et le codage (&amp;lt;code&amp;gt;# -*- coding: utf-8 -*-&amp;lt;/code&amp;gt;) :&lt;br /&gt;
&amp;lt;div class=code&amp;gt;&lt;br /&gt;
&amp;lt;div class=comment&amp;gt;#!/usr/bin/python&amp;lt;br&amp;gt;# -*- coding: utf-8 -*-&amp;lt;/div&amp;gt;print &amp;quot;Vive le python !&amp;quot;&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Ca permet notamment de pouvoir lancer directement le script (en ayant prit soit de vérifier les permissions d&#039;execution) : &lt;br /&gt;
&amp;lt;div class=&#039;code&#039;&amp;gt;bash$ ./hello.py&amp;lt;br&amp;gt;&lt;br /&gt;
Vive le python !&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=note&amp;gt;&amp;lt;b&amp;gt;Note 2 :&amp;lt;/b&amp;gt; A cette étape du document, assurez-vous de mettre toutes les lignes du script au même niveau (à la même identation).&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;/div&gt;</summary>
		<author><name>Gedsismik</name></author>
	</entry>
	<entry>
		<id>https://lea-linux.org/docs/index.php?title=Utilisateur:Gedsismik&amp;diff=10291</id>
		<title>Utilisateur:Gedsismik</title>
		<link rel="alternate" type="text/html" href="https://lea-linux.org/docs/index.php?title=Utilisateur:Gedsismik&amp;diff=10291"/>
		<updated>2005-10-31T00:21:25Z</updated>

		<summary type="html">&lt;p&gt;Gedsismik : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Fonctions ==&lt;br /&gt;
&lt;br /&gt;
* Contributeur aux articles (mais surtout [http://lea-linux.org/fortune/ aux fortunes] ;) )&lt;br /&gt;
* Co-administrateur de [http://bsd.lea-linux.org Bea-BSD] (si on peut considéré ce site comme dans Lea)&lt;br /&gt;
* Troll sur IRC&lt;br /&gt;
&lt;br /&gt;
== Test du wiki ==&lt;br /&gt;
&lt;br /&gt;
Je me sers de cette page pour tester le wiki de [http://lea-linux.org Lea-Linux]. J&#039;en profite pour passer un coucou à tous ceux que je connais et féliciter les admin&#039; Anne, Fred et Prae.&lt;br /&gt;
&lt;br /&gt;
== Quelques Liens ==&lt;br /&gt;
&lt;br /&gt;
* Site personnel : http://gedsismik.free.fr&lt;br /&gt;
* Site de Bea-BSD : http://bsd.lea-linux.org&lt;br /&gt;
&lt;br /&gt;
{{Copy|2005|GEDsismik|CC-BY-SA}}&lt;/div&gt;</summary>
		<author><name>Gedsismik</name></author>
	</entry>
	<entry>
		<id>https://lea-linux.org/docs/index.php?title=Utilisateur:Gedsismik&amp;diff=10290</id>
		<title>Utilisateur:Gedsismik</title>
		<link rel="alternate" type="text/html" href="https://lea-linux.org/docs/index.php?title=Utilisateur:Gedsismik&amp;diff=10290"/>
		<updated>2005-10-31T00:20:11Z</updated>

		<summary type="html">&lt;p&gt;Gedsismik : Test du wiki&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Fonctions ==&lt;br /&gt;
&lt;br /&gt;
* Contributeur aux articles (mais surtout [http://lea-linux.org/fortune/ aux fortunes] ;) )&lt;br /&gt;
* Co-administrateur de [http://bsd.lea-linux.org Bea-BSD] (si on peut considéré ce site comme dans Lea)&lt;br /&gt;
* Troll sur IRC&lt;br /&gt;
&lt;br /&gt;
== Quelques Liens ==&lt;br /&gt;
&lt;br /&gt;
* Site personnel : http://gedsismik.free.fr&lt;br /&gt;
* Site de Bea-BSD : http://bsd.lea-linux.org&lt;br /&gt;
&lt;br /&gt;
{{Copy|2005|GEDsismik|CC-BY-SA}}&lt;br /&gt;
&lt;br /&gt;
== Test du wiki ==&lt;br /&gt;
&lt;br /&gt;
Je me sers de cette page pour tester le wiki de [http://lea-linux.org Lea-Linux]. J&#039;en profite pour passer un coucou à tous ceux que je connais et féliciter les admin&#039; Anne, Fred et Prae.&lt;/div&gt;</summary>
		<author><name>Gedsismik</name></author>
	</entry>
	<entry>
		<id>https://lea-linux.org/docs/index.php?title=Utilisateur:Gedsismik&amp;diff=10289</id>
		<title>Utilisateur:Gedsismik</title>
		<link rel="alternate" type="text/html" href="https://lea-linux.org/docs/index.php?title=Utilisateur:Gedsismik&amp;diff=10289"/>
		<updated>2005-10-31T00:17:41Z</updated>

		<summary type="html">&lt;p&gt;Gedsismik : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Fonctions ==&lt;br /&gt;
&lt;br /&gt;
* Contributeur aux articles (mais surtout [http://lea-linux.org/fortune/ aux fortunes] ;) )&lt;br /&gt;
* Co-administrateur de [http://bsd.lea-linux.org Bea-BSD] (si on peut considéré ce site comme dans Lea)&lt;br /&gt;
* Troll sur IRC&lt;br /&gt;
&lt;br /&gt;
== Quelques Liens ==&lt;br /&gt;
&lt;br /&gt;
* Site personnel : http://gedsismik.free.fr&lt;br /&gt;
* Site de Bea-BSD : http://bsd.lea-linux.org&lt;br /&gt;
&lt;br /&gt;
{{Copy|2005|GEDsismik|CC-BY-SA}}&lt;/div&gt;</summary>
		<author><name>Gedsismik</name></author>
	</entry>
	<entry>
		<id>https://lea-linux.org/docs/index.php?title=Utilisateur:Gedsismik&amp;diff=10288</id>
		<title>Utilisateur:Gedsismik</title>
		<link rel="alternate" type="text/html" href="https://lea-linux.org/docs/index.php?title=Utilisateur:Gedsismik&amp;diff=10288"/>
		<updated>2005-10-31T00:10:10Z</updated>

		<summary type="html">&lt;p&gt;Gedsismik : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Contributeur aux articles (mais surtout aux fortunes ;) ).&lt;br /&gt;
Co-administrateur de Bea-BSD.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 - Site personnel : http://gedsismik.free.fr&lt;br /&gt;
&lt;br /&gt;
 - Site de Bea-BSD : http://bsd.lea-linux.org&lt;/div&gt;</summary>
		<author><name>Gedsismik</name></author>
	</entry>
	<entry>
		<id>https://lea-linux.org/docs/index.php?title=Utilisateur:Gedsismik&amp;diff=10287</id>
		<title>Utilisateur:Gedsismik</title>
		<link rel="alternate" type="text/html" href="https://lea-linux.org/docs/index.php?title=Utilisateur:Gedsismik&amp;diff=10287"/>
		<updated>2005-10-30T22:48:19Z</updated>

		<summary type="html">&lt;p&gt;Gedsismik : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt; - Site personnel : http://gedsismik.free.fr&lt;br /&gt;
 - Site de Bea-BSD : http://bsd.lea-linux.org&lt;/div&gt;</summary>
		<author><name>Gedsismik</name></author>
	</entry>
	<entry>
		<id>https://lea-linux.org/docs/index.php?title=Utilisateur:Gedsismik&amp;diff=10286</id>
		<title>Utilisateur:Gedsismik</title>
		<link rel="alternate" type="text/html" href="https://lea-linux.org/docs/index.php?title=Utilisateur:Gedsismik&amp;diff=10286"/>
		<updated>2005-10-30T22:41:34Z</updated>

		<summary type="html">&lt;p&gt;Gedsismik : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Site personnel : http://gedsismik.free.fr\n&lt;br /&gt;
Site de Bea-BSD : http://bsd.lea-linux.org&lt;/div&gt;</summary>
		<author><name>Gedsismik</name></author>
	</entry>
	<entry>
		<id>https://lea-linux.org/docs/index.php?title=Utilisateur:Gedsismik&amp;diff=10285</id>
		<title>Utilisateur:Gedsismik</title>
		<link rel="alternate" type="text/html" href="https://lea-linux.org/docs/index.php?title=Utilisateur:Gedsismik&amp;diff=10285"/>
		<updated>2005-10-30T22:35:31Z</updated>

		<summary type="html">&lt;p&gt;Gedsismik : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Site personnel : http://gedsismik.free.fr&lt;br /&gt;
&lt;br /&gt;
Site de Bea-BSD : http://bsd.lea-linux.org&lt;/div&gt;</summary>
		<author><name>Gedsismik</name></author>
	</entry>
	<entry>
		<id>https://lea-linux.org/docs/index.php?title=Utilisateur:Gedsismik&amp;diff=10284</id>
		<title>Utilisateur:Gedsismik</title>
		<link rel="alternate" type="text/html" href="https://lea-linux.org/docs/index.php?title=Utilisateur:Gedsismik&amp;diff=10284"/>
		<updated>2005-10-30T22:33:26Z</updated>

		<summary type="html">&lt;p&gt;Gedsismik : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Site personnel : http://gedsismik.free.fr&amp;lt;br /&amp;gt;&lt;br /&gt;
Site de Bea-BSD : http://bsd.lea-linux.org&lt;/div&gt;</summary>
		<author><name>Gedsismik</name></author>
	</entry>
	<entry>
		<id>https://lea-linux.org/docs/index.php?title=Utilisateur:Gedsismik&amp;diff=10283</id>
		<title>Utilisateur:Gedsismik</title>
		<link rel="alternate" type="text/html" href="https://lea-linux.org/docs/index.php?title=Utilisateur:Gedsismik&amp;diff=10283"/>
		<updated>2005-10-30T22:32:53Z</updated>

		<summary type="html">&lt;p&gt;Gedsismik : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Site personnel : http://gedsismik.free.fr&lt;br /&gt;
&lt;br /&gt;
Site de Bea-BSD : http://bsd.lea-linux.org&lt;/div&gt;</summary>
		<author><name>Gedsismik</name></author>
	</entry>
	<entry>
		<id>https://lea-linux.org/docs/index.php?title=Utilisateur:Gedsismik&amp;diff=10282</id>
		<title>Utilisateur:Gedsismik</title>
		<link rel="alternate" type="text/html" href="https://lea-linux.org/docs/index.php?title=Utilisateur:Gedsismik&amp;diff=10282"/>
		<updated>2005-10-30T22:32:33Z</updated>

		<summary type="html">&lt;p&gt;Gedsismik : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
Site personnel : http://gedsismik.free.fr&lt;br /&gt;
Site de Bea-BSD : http://bsd.lea-linux.org&lt;/div&gt;</summary>
		<author><name>Gedsismik</name></author>
	</entry>
</feed>