J’ai atteint un stade agréable dans ma phase d’apprentissage RubyOnRails : je m’amuse enfin avec ce langage ! Oh, je ne sais pas encore tout faire, loin de là, et comme je le disais dans un précédent billet, la phase d’apprentissage n’est pas si courte que cela lorsque l’on vient de PHP ! Mais bon, j’en sais assez pour me permettre d’écrire ce nouveau petit didacticiel destinés à ceux qui veulent faire leur premier pas avec Rails et qui veulent bien le faire !
L’objectif de ce billet est de permettre à chacun de créer son premier site Internet (ou plutôt sa première application) avec Ruby On Rails, depuis l’écriture de la première ligne de code jusqu’à sa mise en ligne. Pour cela il nous faut un sujet, on pourrait prendre l’exemple d’un blog mais certains l’on déjà fait, on pourrait essayer de faire une petite boutique de ecommerce mais d’autres en ont déjà fait livre. En fait, on pourrait “presque” tout faire… mais le but n’est vraiment pas de coder une application complexe, il faut que ce soit simple à écrire et à comprendre !
Je tranche donc, ce sera une petite application de gestion de CDs, basique : ajout de CD, édition, suppression, consultation. C’est pas le graal mais c’est pas le but. Faut que ce soit à la porté de tout le monde afin d’introduire Ruby On Rails.
Préparation du développement.
Avant de coder quoi que ce soit, il nous faut préparer l’environnement de développement. Cet environnement se compose de 2 parties : le moteur (Ruby, Rails, WEBrick ou Mongrel) et l’éditeur (Eclipse, Radrails, TextMate, Vim, et j’en passe…). Il est possible d’installer cet environnement sous Linux, OSX ou encore Windows. Je ne décrirais pas ici comment faire pour installer tout cela mais je vais vous donner les liens pour passer cette étape avec succès.
- Linux (Ubuntu) : Installer Ruby On Rails & Eclipse (Radrails)
- OSX : HowtoInstallOnOSXTiger et quelques mots sur TextMate, un éditeur adulé par les inconditionnels de la pomme.
- Windows : Je ne sais pas trop comment ça se passe sous cet environnement, mais vous pouvez jeter un oeil sur InstantRails (ici en français)
- (Si vous connaissez d’autres types d’installations ou d’autres bon tutos, faites moi en part dans les commentaires, je les noterai ci dessous !)
- Windows par Aurélien : Utilisation de WAMP5, la procédure est décrite dans son commentaire en bas de page.
- __Windows avec EasyRails : Je n’ai pas testé mais cela me semble très prometteur. Le but de ce projet étant d’amener du monde vers Rails, je ne peux qu’aprouver ! (Easyrails)
Petite note personnelle : Je suis sous Ubuntu Linux et j’utilise Radrails en tant que plugin pour Eclipse pour développer, Radrails permet de faire certaines actions grâce à une interface, dans le petit tutorial ci dessous, j’utiliserai directement les commandes à saisir sur votre console (Linux ou Windows)
Création de l’application mesCDs !
On ne peut parler de Rails sans dire 2 mots du fameux Modèle-Vue-Contrôleur (MVC), c’est un patron de conception (design pattern) sur lequel est basé le framework Rails. Pour résumer très rapidement, rails vous permettra donc de mettre en oeuvre chacun des principes de ce MVC. Les modèles seront votre interface de communication avec la base de donnée, les contrôleurs seront le lieux ou vous écrirez vos actions et enfin les vues seront destinées à présenter l’information…
Ce n’est pas grave si tout n’est pas encore clair, le mieux c’est de se lancer !
Création de l’arborescence Rails du projet.
La première étape d’un nouveau projet rubyonrails est la création de ce projet, une commande vous permettra de créer l’arborescence de base et générera certains fichiers indispensables.
# rails mesCDs
Une liste de dossier et de fichiers seront donc crées dans le répertoire mesCDs. Vous pouvez faire un petit tour dans cette arborescence afin de vous familiariser avec le nom des répertoires. Vous trouverez notamment un répertoire ‘app’ dans lequel vous travaillerez le plus souvent, lui même contient 4 sous répertoires dont le nom devrait vous rappeler quelquechose… On retrouve en effet un répertoire pour chaque brique du MVC (models, views, controllers) et un 4ème répertoire appelé “helpers”. Ce dernier contiendra des fichiers qui pourront être apparentés à des bibliothèques de fonctions… On y reviendra plus tard !
Avant d’aller plus loin et pour vous prouver qu’un projet Rails est réellement rapide à mettre en oeuvre, nous allons entrer dans le répertoire mesCD et lancer la commande suivante :
# script/server
Vous devriez avoir un message dans ce style parmis d’autre: “Rails application starting on http://0.0.0.0:3000”. Cela veut dire que votre application Rails est lancée et qu’elle est disponible pour test à travers votre navigateur à l’adresse http://0.0.0.0:3000. (0.0.0.0 étant le localhost). Vous venez de lancer un serveur Mongrel, si vous interrompez ensuite ce script vous coupez le serveur Mongrel. Rendez-vous à l’url indiquée (http://0.0.0.0:3000), vous aurez droit au joli “Welcome aboard” : cet écran vous explique comment débuter votre projet. Il est assez minimaliste mais à tout de même le mérite de nous indiquer quelle est notre prochaine étape : la base de donnée.
Connexion d’une base MySQL
Rails est conçu pour développer des applications nécessitant une base de donnée, aujourd’hui c’est quasiment le “sine qua non” des applications modernes. Cependant Rails peut fonctionner sans, je vous laisserai le découvrir par vous même au fur et à mesure de votre apprentissage !
Revenons donc à nos moutons… Il nous faut créer une base de donnée et indiquer à notre nouvelle application comment l’utiliser. MySQL étant le type de base le plus largement utilisé dans la création d’application web nous allons donc travailler avec ! (Il faut savoir que Rails peut fonctionner avec d’autres bases de données relationnelles.)
Ouvrez donc un prompt MySQL (amis windowsiens débrouillez vous avec phpmyadmin ou autre gadget
) et créez votre base :
# mysql> create database mescds;
Créez ensuite un couple user/pass pour accéder à votre base de donnée :
# mysql> grant all on mescds.* to 'user' identified by 'password';
La base de données créée et vos informations bien en tête, nous allons maintenant renseigner le fichier de configuration associé. (config/database.yml) Editez le et compléter la partie correspondante :
development:
adapter: mysql
database: mescds
username: user
password: password
host: localhost
Nous n’avons touché que la configuration correspondant à la base de développement car Rails fonctionne par défaut en mode ‘development’, ce mode sera changé lors du passage en production, nous le verrons plus tard lorsque nous mettrons en ligne notre future application… L’application devrait maintenant être en relation avec votre base de donnée, vous pouvez alors effacer le fichier correspondant à la page d’accueil :
# rm public/index.html
et relancer votre serveur Mongrel (interruption du script puis commande script/server à nouveau), la page http://localhost:3000 devrait alors vous afficher une erreur “Routing Error”, rien d’alarmant, il faut maintenant coder un peu…
Création du modèle “cds”
Dans une application classique “assez propre”, pour gérer une base de donnée de CDs, la première étape assez longue est de créer une table “CDs” puis d’écrire une classe permettant d’exécuter des actions simples telles que ajouter un champs, supprimer un champs, mettre à jour un champs, afficher les champs, etc. Cette étape est grandement simplifiée dans Rails, ActiveRecords (une des parties de Rails) nous fournit ce que l’on appelle une abstraction de la base de donnée.
Voyons maintenant comment l’utiliser. Créons d’abord notre modèle “cd”
# script/generate model cd
Si l’on inspecte un peu le retour de cette commande, on observe qu’elle crée 4 fichiers (et un répertoire) :
create app/models/cd.rb
create test/unit/cd_test.rb
create test/fixtures/cds.yml
create db/migrate/001_create_cds.rb
Le premier “cd.rb” est notre modèle (gardez en tête le MVC !), le second “cd_test.rb” est un fichier permettant de tester l’application (je ne m’étendrai pas sur cette partie que je ne maîtrise pas bien), le troisième “cds.yml” est un fichier dans lequel on peut renseigner un jeu de tests (des données fictives de l’application), le dernier “001_create_cds.rb” est le fichier indiquant comment créer la table “cd” en base de donnée, et c’est d’ailleurs par là que nous allons commencer.
Arrêtons nous une minute, pour réfléchir à notre table CDs : un cd peut être défini par un titre, un auteur et une brève description par exemple. Nous allons donc indiquer ce que nous voulons dans le fichier “db/migrate/001_create_cds.rb” que je vous laisse lire car il est assez explicite :
class CreateCds < ActiveRecord::Migration
def self.up
create_table :cds do |t|
t.column :title, :string
t.column :author, :string
t.column :description, :string
end
end
def self.down
drop_table :cds
end
end
Et pour finir nous allons dire à notre application qu’il faut “migrer” c’est à dire changer de version (ou encore exécuter 001_create_cds.rb), toujours dans votre console à la racine de votre application tappez :
# rake db:migrate
Et la magie va s’opérer : la table “cds” va être crée automatiquement dans MySQL, concrètement ce qui se passe c’est que la commande rake db:migrate si elle est appelée sans paramètre va invoquer les méthodes self.up de chaque classe de Migration (chaque fichier du répertoire db/migrate/). En spécifiant un paramètre comme le numéro de la migration vers laquelle nous voulons aller, Rails fera en sorte de revenir à la version demandée en invoquant les méthodes self.down impliquées… subtil mécanisme, peut être pas évident à saisir dans un premier temps mais terriblement efficace !
Prenons un example, la spécification faites en début de projet d’un CD ne me plaît plus, il me manque des informations cruciales telles que l’année de parution ou encore la date d’achat si je veux garder un historique des achats de mes CDs… Nous allons créer une nouvelle “migration” pour notre modèle :
# script/generate migration add_some_dates
Le script génère le fichier db/migrate/002_add_some_dates.rb qu’il ne nous reste plus qu’a compléter avec les instruction d’ajout de colonne en self.up et les instruction de suppression de colonne en self.down :
class AddSomeDates < ActiveRecord::Migration
def self.up
add_column :cds, :year, :integer
add_column :cds, :buy_date, :datetime
end
def self.down
remove_column :cds, :year
remove_column :cds, :buy_date
end
end
Il suffit d’exécuter à nouveau :
# rake db:migrate
pour mettre la base de donnée à jour avec les nouvelles informations…
Maintenant que je vous ai mis l’eau à la bouche avec ces premières ligne de code, passons à la vitesse supérieure !
Génération automatique de l’application !
Vous avez bien lu le titre… et si vous vous intéressez un tant soi peu à Rails vous avez du voir quelques démos et vous savez que c’est possible… mais comment ? Nous allons le voir maintenant.
La génération automatique de l’application (mécanisme appelé scaffold) s’appuie sur votre modèle pour générer les méthodes du contrôleur et la (ou les) vue(s) dynamiquement. En utilisant cette méthode nous n’abordons pas l’écriture complète d’un “controller” et d’une “view”. (Parcequ’il est intéressant de voir ce mécanisme de scaffold mais aussi parcequ’il ne faut pas perdre de vue l’aspect “VC” du MVC nous y reviendrons plus en détail par la suite.)
Scaffold…
Le scaffold s’appuie donc sur un modèle. En fait le principe est d’indiquer dans le fichier du contrôleur quel est le nom de notre modèle. Il faut donc commencer par générer un contôleur pour nos CDs que nous appellerons simplement “cd” :
# script/generate controler cd
Encore une fois Rails va créer 3 nouveaux fichier dont app/controllers/cd_controller.rb qui nous intéresse. C’est dans ce fichier (notre contrôleur) que nous allons “décrire” le scaffold. Cela se fait de la manière suivante :
class CdController < ApplicationController
scaffold :cd
end
Et c’est fini ! En fait la ligne “scaffold :cd” indique au contrôleur CdController d’utiliser le modèle “cd”.
Il vous suffit ensuite de vous rendre sur votre site : http://localhost:3000/cd… et si la magie à bien opéré vous pourrez dès à présent voir votre liste de CD, en ajouter, en supprimer ou encore en éditer !
Bon alors c’est bien beau mais… jusque là, on a écrit aucune ligne de code (ou presque) pour faire tout ça. Alors, comment va t’on faire pour pouvoir modifier cette petite application ?
Nous allons simplement dire à Rails de générer le code une bonne fois pour toute au lieu de le générer dynamiquement à chaque appel…
Générer le code correspondant au scaffold !
Je ne dirai qu’une seule chose :
# script/generate scaffold cd cd
Notre contrôleur portant le même nom que notre modèle, la syntaxe peut paraître floue. La voila en plus clair :
# script/generate scaffold ModelName ControllerName
La commande devrait vous demander de remplacer des fichiers existant, il faut bien entendu confirmer. Ceci fait, si vous vous rendez à l’adresse http://localhost:3000/cd vous verrez que rien n’a changé. Pourtant tout le code a été généré, pour vous en rendre compte éditer votre contrôleur (app/controllers/cd_controller.rb).
class CdController < ApplicationController
def index
list
render :action => 'list'
end
...
Et oui ! Il est tout plein de méthodes pour ajouter, supprimer, éditer ou encore lister vos CD… Vous pouvez vous attarder un peu sur ce fichier et essayer d’en lire le code. Même si il ne vous parle pas trop, cela vous habituera un peu à la syntaxe. Ruby (et donc Rails) est connu pour être un code relativement facile à lire.
Tant que vous y êtes, faites un petit tour dans les autres répertoires, notamment celui des vues (app/views). Vous verrez que les vues sont en fait les fichiers contenant le code HTML servant à la présentation des informations. Le répertoire app/views/cd contient toutes les vues concernant le contrôleur “cd”, le répertoire app/views/layout contient lui des “patrons de présentation”. En fait une vue sera affichée à l’intérieur d’un layout. Un layout peut donc être utilisé pour concevoir la structure d’affichage des informations.
Dans notre exemple, le layout cd.rhtml est utilisé par toutes les vues. Ce comportement est automatique car le layout porte le nom du contrôleur, mais attention ce comportement n’est pas non plus rigide, il est possible d’indiquer à un contrôleur d’utiliser un layout différent que celui par défaut. C’est utile par exemple lorsque l’ensemble de notre application doit être présenté de la même façon. C’est le cas par exemple d’une grande partie des sites Internet qui quels que soit la page garde toujours une structure avec un bandeau, un menu et un contenu…
Avant d’aller plus loin nous allons régler un “pseudo” problème : l’erreur sur la page d’accueil. Maintenant que nous avons un semblant d’application, ce serait pas mal que lorsqu’on appelle directement notre site (http://localhost:3000) la liste des CDs arrive en page d’accueil. Ceci peut être résolu par les routes. Editez donc le fichier config/routes.rb :
Décommentez la ligne suivante :
#map.connect '', :controller => "welcome"
et modifier la comme suit :
map.connect '', :controller => "cd"
En vous rendant sur http://localhost:3000 vous devriez normalement accéder directement à votre application. Ce fichier routes.rb permet de définir des “routes” pour votre application, je n’en dirai pas plus pour l’instant et je vous invite à lire les commentaires de ce fichier pour en apprendre un peu plus.
Je veux des commentaires !
Sur l’application de gestion de CDs… les commentaires. Pas sur mon article ! Quoique…
Bref, que serait une application moderne sans la possibilité pour les utilisateurs de commenter tout ce qu’ils cliquent ? … D’accord, d’accord… le but de l’article n’est pas de faire du web2 mais bon, tant qu’a faire, on utilise un langage qui fait “class” alors pourquoi ne pas y ajouter quelques petites fonctionnalités de ce qu’on appelle plus sérieusement le “user generated content” !
Nous aborderons donc dans cette partie la création du modèle “comment”, son lien avec le modèle “cd”, la modification du contrôleur CD et des vues existantes, et enfin nous verrons comment ajouter une pincée d’Ajax dans la machine…
Le modèle commentaire.
# script/generate model comment
Nous nous arrêterons là pour les générations ce coup ci. Le reste sera fait à la mano
Commençons par décrire notre table commentaire dans le fichier de migration (db/migrate/003_create_comments.rb)
class CreateComments < ActiveRecord::Migration
def self.up
create_table :comments do |t|
t.column :content, :text
t.column :author, :string
t.column :email, :string
t.column :cd_id, :integer, :null => false
end
end
def self.down
drop_table :comments
end
end
Notez qu’il est nécessaire d’indiquer le nom de la colonne qui servira à faire la relation entre les commentaires et les CDs ( :cd_id ).
# rake db:migrate
Et votre table sera crée !
Lien avec le modèle CD
Il faut maintenant indiquer à notre application qu’il existe un lien entre les tables “cd” et “commentaires”. Ce lien sera indiqué dans les modèles respectifs :
(app/models/cd.rb)
class Cd < ActiveRecord::Base
has_many :comments, :dependent => :destroy
end
On indique ici qu’un Cd “a beaucoup” de commentaires et aussi que si on supprime un Cd, alors les commentaires associés seront aussi supprimés ! (merci Rénald.) Cette dépendance est ici spécifiée sur la couche application, on pourrait aussi l’ajouter au niveau des données (MySQL) à travers une relation (FOREIGN KEY / ON DELETE CASCADE) pour être certain de l’intégrité des données lors de la suppression.
(app/models/comment.rb)
class Comment < ActiveRecord::Base
belongs_to :cd
end
Et ici on dit qu’un commentaire “appartient à” un CD !
Notre application sait maintenant qu’une relation de type 0..N uni nos 2 tables.
Listing et formulaire de création de commentaire :
Les commentaires et leur formulaire d’ajout se trouvent classiquement sur la fiche CD, éditons donc la vue correspondante (app/views/cd/show.rhtml) et ajoutons y nos 2 parties :
<h1>Fiche CD</h1>
<h2>Contenu</h2>
<% for column in Cd.content_columns %>
<p>
<b><%= column.human_name %>:</b> <%=h @cd.send(column.name) %>
</p>
<% end %>
<%= link_to 'Edit', :action => 'edit', :id => @cd %> |
<%= link_to 'Back', :action => 'list' %>
<h2>Commentaires</h2>
<% for comment in @cd.comments %>
<h3><%=h comment.author%> - <%=h comment.email%></h3>
<p><%=comment.content%></p>
<% end %>
<h3>Ajouter un commentaire :</h3>
<%= form_tag :action => "add_comment", :id=>@cd %>
Auteur : <%= text_field "comment", "author" %><br />
Email : <%= text_field "comment", "email" %><br />
<%= text_area "comment", "content" %><br />
<%= submit_tag "Valider" %>
</form>
On a donc une boucle “for” qui parcours le contenu des commentaires associés au CD en cours (@cd.comments). Pour réaliser le formulaire on utilise des “helpers”, ce sont des méthodes qui nous aide à générer le code HTML correspondant. Par exemple le helper “formtag” envoie les résultats du formulaire sur l’action “addcomment” du contrôleur “cd” en lui passant comme paramètre le CD en cours.
C’est bien beau d’avoir le formulaire mais il nous faut maintenant écrire une méthode pour pouvoir enregistrer un commentaire, pour cela nous allons éditer le fichier app/controller/cd_controller.rb et ajouter la méthode add_comment :
class CdController < ApplicationController
...
def add_comment
Cd.find(params[:id]).comments.create(params[:comment])
flash[:notice] = "Commentaire ajouté !"
redirect_to :action => "show", :id => params[:id]
end
end
Cette méthode reçoit donc les résultats du formulaire. “Cd.find(params[:id])” accède à l’objet CD dont l’id a été envoyé, “comments” accède à la collection de commentaires de cet objet CD et “create” réalise une action sur cette collection en y ajoutant l’objet “:comment” reçu par en paramètre. Enfin la méthode add_comment nous renvoie sur la méthode “show” avec l’id en cours afin de re-afficher la fiche CD.
Quelques vérifications…
Ou plutôt devrais-je dire “validations”… En effet nous allons vérifier que les informations saisie à travers les formulaires sont bien celles que nous attendons. Pour cela Rails nous fournit un mécanisme très performant de validations.
Reprenons un instant le formulaire d’ajout de CDs, il serait intéressant de vérifier lors d’un ajout que les champs Titre et Auteurs soient systématiquement présents. Pour faire cela éditons le fichier app/models/cd.rb comme ci dessous :
class Cd < ActiveRecord::Base
has_many :comments
validates_presence_of :title, :author
end
… et la pincée d’Ajax !
Personnellement, j’aime lorsque Ajax est utilisé à bon escient, on peut dire alors qu’il est non intrusif pour l’utilisateur. Ainsi en général je me fixe comme règle d’utiliser ajax que si cela apporte un réel plus à l’utilisateur. Dans tous les cas il faut qu’un visiteur sans Javascript puisse quand même effectuer l’action demandée.
Sachant cela, nous pouvons nous lancer. Nous allons permettre à nos visiteurs de publier un commentaire sans impliquer le rechargement total de la page, c’est presque inutile/intrusif mais c’est pour l’exemple
(J’avais promis qu’on aurait un peu d’ajax dans notre première appli Rails !)
Il faut d’abord commencer par alléger un peu notre fichier affichant le CD et les commentaires. Pour cela nous allons utiliser le système des “partial”. Ces partial sont en fait des vues partielles, ainsi cela nous permettra de mettre ce qui concerne l’affichage d’un seul commentaire dans un fichier à part et de l’inclure dans notre fichier principal.
Créons donc notre fichier app/views/cd/_comment.rhtml (le “_” a son importance !) et mettons y ce qui concerne notre commentaire (ce qu’il y avait donc dans la boucle for de la page show.rhtml)
<h3><%=h comment.author%> - <%=h comment.email%></h3>
<p><%= comment.content%></p>
Ainsi notre fichier app/views/cd/show.rhtml devient (dans la partie concernant les commentaires) :
...
<h2>Commentaires</h2>
<div id="comments">
<%= render(:partial => "comment", :collection => @cd.comments) %>
</div>
<h3>Ajouter un commentaire :</h3>
...
Le partial “_comment.rhtml” sera donc appelé pour chaque occurrence de la collection “@cd.comments” en mettant le résultat dans une variable du nom du partial (comment). Intéressons nous maintenant au formulaire d’ajout de commentaire. Il faut lui dire d’envoyer ses données grâce à l’objet XmlHttpRequest, cela se fait de façon transparente de cette manière :
<h3>Ajouter un commentaire :</h3>
<%= form_remote_tag(:url => {:controller=> :cd, :action => :add_comment, :id => @cd }, :update => 'comments', :position=> :bottom) %>
Auteur : <%= text_field "comment", "author" %><br />
Email : <%= text_field "comment", "email" %><br />
<%= text_area "comment", "content","cols" => 60, "rows" => 5 %><br />
<%= submit_tag "Valider" %>
</form>
Le helper form_remote_tag va envoyer les résultats du formulaires sur la même action (:add_comment), lorsque le formulaire sera exécuté l’élément ‘comments’ sera mis à jour en insérant le contenu mis à jour en bas (:position=> :bottom).
Avant de tester il va falloir modifier un peu la méthode :add_comment afin qu’elle gère correctement notre formulaire Ajax :
def add_comment
@comment=Cd.find(params[:id]).comments.create(params[:comment])
if request.xhr?
render (:partial => "comment", :locals => { :comment => @comment } )
else
redirect_to :action => "show", :id => params[:id]
end
end
Le test request.xhr vérifie si notre requête a été transmise par l’objet XmlHttpRequest ou de façon plus classique, dans le cas d’un fonctionnement Ajax nous indiquons de n’afficher que le partial, dans le cas contraire toute l’action “show” est exécutée.
Update : Enfin pour que le javascript fonctionne correctement il faut ajouter au fichier app/views/layouts/cd.rhtml la ligne suivante entre les balises head :
</head>
...
<%= javascript_include_tag :defaults %>
</head>
Passage en production.
Considérons notre application comme terminée. Elle est certe moche et sans intérêt majeur mais mettons nous dans l’optique de la publier sur un hébergement Rails. Avant d’entamer les recherches pour un hébergeur nous allons passer en mode “production”. Ce mode doit être utilisé lorsque l’application est terminée.
Il faut donc définir la configuration du mode production dans le fichier de base de donnée (config/database.yml) :
production:
adapter: mysql
database: mescds
username: user
password: password
host: localhost
Enfin il faut changer le mode actif dans le fichier “config/environment.rb”, pour cela il suffit de décommenter la 5ème ligne :
ENV['RAILS_ENV'] ||= 'production'
Normalement il faudrait redémarrer le serveur, mais sur votre environnement cela ne sert à rien il me semble car Rails force le mode “development”. Ce n’est pas grave, les fichiers sont prêts à être envoyer en ligne…
Mise en Ligne !
Changement de dernière minute
Cette partie devait être l’une des plus intéressante de ce billet car c’est un sujet peu abordé dans le monde “Rails” où les hébergeurs ne sont pas encore très nombreux mais voilà… j’avais prévu de faire cette partie avec HostingRails qui proposait un hébergement gratuit mais apparemment c’est fini, ils ne proposent plus de formule gratuite… (C’est tout récent, quand j’ai commencé l’écriture de ce billet il ya plusieurs jours cela existait encore…)
Ils ont quand même des offres à bas prix (ça doit démarrer à un peu moins de $4 par mois…) et ayant toujours un hébergement chez eux (ils n’ont quand même pas supprimer les comptes existants !), si ça intéresse des gens que je publie comment faire pour mettre en ligne l’application, je le ferai avec plaisir.
En attendant si vous avez une dédibox ou un serveur dédié, vous pouvez toujours lire cet autre billet qui vous expliquera comment mettre en place un hébergement Rails digne d’un serveur de production, depuis l’installation jusqu’au déploiement de l’application grâce à Capistrano.
Hébergement Dreamhost
Pour ceux qui sont intéressés par un hébergement un peu plus professionnel avec une architecture proche de celle que j’ai déployée sur ma dédibox, je vous conseille d’aller voir chez Dreamhost. Pour $9.95 par mois, vous aurez accès à plus de 200Go d’espace disque, 1 To de transfert/mois, base mysql illimitées, 3000 comptes mails et 75 users SSH/FTP. Vous pourrez alors faire du RubyOnRails mais aussi du PHP4 ou PHP5, vous pourrez utiliser un serveur de versionning (Subversion), vous pourrez même déployer votre application en utilisant Capistrano !
Le prix tombe à $7.95/mois si l’on paye pour 2 ans, mais ce n’est pas tout, avec cet hébergement vous avez un nom de domaine offert et vous pourrez rapidement déployer votre propre blog Wordpress (comme le mien) ! Enfin, vu que j’ai déjà un hébergement là-bas, je peux vous faire profiter d’une ristourne de $50 sur votre achat en saisissant ce code promo en bas de page : STONEAGECODE.
Pour aller plus loin …
Je conseille vivement la lecture du livre “Agile Web Development With Rails” qui présente la création d’une boutique de ecommerce en Rails de façon très didactique.
et enfin pour aller encore plus loin …
Update 05/06/07 : Je viens d’écrire un nouvel article sur comment faire un nuage de tag avec ruby on rails, il fait suite à cet article et reprend le même exemple.




Pour les nouveaux (comme moi) qui arrivent sur Rails 2, voici un tuto tout aussi sympa que celui de Pierre à cette adresse: http://fairleads.blogspot.com/2007/12/rails-20-and-scaffolding-step-by-step.html Je confirme que certaines étapes ont changé… Bonne continuation.
Génial !
[…] A Simple French Tutorial to start with Rails : Ma première application RubyOnRails […]
Pour le changement avec Rails2, moi j’y suis arrivé avec ça :
>ruby script/generate scaffold Cd title:string author:string description:string
comme indiqué dans le tuto http://fairleads.blogspot.com/2007/12/rails-20-and-scaffolding-step-by-step.html dont François a parlé un ptit plus haut.
Sinon merci pour le tuto, je débute en Rails et j’avoue être un chouya impressioné
[…] A Simple French Tutorial to start with Rails : Ma première application RubyOnRails […]
Merci pour le tuto. C’est juste dommage que ça ne marche plus avec la nouvelle version.
Pourquoi ne pas faire une petite mise à jour si vous avez le temps.
Merci Thibane
J’ai fini le tuto sauf la partie “Passage en production” (ca m’interressait pas), Donc sachant que rails a un peu changé, je donne quelques solutions pour le tuto (les erreurs que j’ai eu) : j’ai installer InstantRails (V2.0) - Creation du Scaffold : ruby script/generate scaffold cd title:string author:decimal etc.. - class CdController < ApplicationController scaffold :cds end - Listing et formulaire de création de commentaire : au lieu de ‘edit’, :id => @cd %> et la meme pour les autres liens - Au niveau du FormTag, une erreur est presente lorsqu’on execute la page, No Route… il suffit de rajouter map.route ‘/:controller/:action’ a la fin du fichier ‘/config/routes.rb’ - Erreur aussi la : ” {:controller=> :cd, :action => :addcomment, :id…” il faut mettre {:action => ‘add_comment’, :id…”
Voila a peu pres ce que j’ai pu trouver pour finir ce tuto qui explique bien comment ca fonctionne.
широкоформатная печать москва Возможность изготовить ассортимент тканей, выдержанных в едином стиле и цветовой гамме для создания коллекции, индивидуальная роспись и рисунок на ткани, помогут сделать одежду действительно эксклюзивной.
ремонт мобильных телефонов В 1921 году компанией ELEKTROLUX по предложению Акселя была выпущена новая модель пылесоса Model V. Она принесла компании еще большую популярность. Mode l V имела форму цилиндра и была оснащена гибким шлангом с различными насадками. Пылесосы подобного типа выпускались другими фирмами почти до конца XX века. Для удобства пылесос был поставлен на полозья из толстой проволоки - для того, чтобы его можно было без проблем тащить. В 2002 году, через 90 лет после создания вакуумного пылесоса, ELEKTROLUX выпускает пылесос робот Trilobite, который сам передвигается по квартире, распознает стены и углы, а также возвращается к месту зарядки.В 1925 компания выпустила свой первый холодильник. Он еще не был похож на наши современные холодильники, однако был очень удобен в быту. В 1930 был выпущен первый встраиваемый холодильник.
Iphone 3GS 32Gb оптом и в розницу. До 10шт. 28000р. До 30шт. 27000р. До 50шт. 26500р. Свыше 50шт. цена договорная. Находимся мы в России г. Калининград 100% предоплата. Доставка максимум 15 дней. Перевод денег через любые способы переводов. Возможен самовывоз из г. Калининград, без осуществления предоплаты.
ICQ 356391652 моб. 891114622668
требование об уплате таможенных платежей Предмет и пределы доказывания по делу о нарушении таможенных правил Успешное решение задач производства по делам о нарушении таможенных правил, а именно: своевременное, полное и объективное выяснение обстоятельств каждого дела, разрешение его в точном соответствии с законодательством, обеспечение исполнения вынесенного постановления, а также выявление причин и условий, способствующих свершению административных правонарушений, предупреждение правонарушений, - во многом предопределяется четким представлением о предмете данной деятельности - предмете доказывания. Под предметом доказывания понимается совокупность обстоятельств, подлежащих доказыванию по делу о нарушении таможенных правил. Перечень этих обстоятельств дан в статье 320 ТК РФ. Конкретизацией его содержания в каждом случае служат диспозиция статьи главы 39 ТК России (“Виды нарушений таможенных правил и ответственность за эти нарушения”), по которой квалифицируется совершенное правонарушение, а также соответствующие положения главы 38 ТК России (“Общие положения”). В соответствии с законом доказыванию при производстве по делу о нарушении таможенных правил подлежат следующие обстоятельства. 1. Событие правонарушения, то есть предусмотренное соответствующей статьей главы 39 ТК общественно опасное деяние со всеми характеризующими его обстоятельствами (время, место, способ и другие обстоятельства совершения нарушения таможенных правил). Подлежат установлению обстоятельства, позволяющие квалифицировать совершенное правонарушение по соответствующей статье главы 39 ТК, отграничить его от смежных составов, когда такое разграничение осуществляется по признакам объективной стороны состава правонарушения или по его объекту. 2. Виновность физического лица или должностного лица в совершении нарушения таможенных правил. Следует установить, совершило ли лицо, привлекаемое к ответственности, вменяемое ему в вину деяние, фамилию этого лица, его имя, отчество, дату и место рождения, национальность, образование и другие данные о нем, которые позволяют с несомненностью удостоверить его личность.Доказав факт совершения деяния определенным лицом, необходимо выяснить, действовало ли оно при этом умышленно или неосторожно, какова форма умысла или неосторожности. Важное значение имеют мотивы и цели правонарушения, поскольку они могут быть признаны должностным лицом таможенного органа РФ, рассматривающим дело о нарушении таможенных правил, обстоятельством, смягчающим либо отягчающим ответственность. В случаях, когда по обстоятельствам дела возникают сомнения в психической полноценности лица, привлекаемого к ответственности за нарушение таможенных правил, в его способности осознавать значение своих действий или руководить ими, подлежит доказыванию вменяемость этого лица (ст. 235 ТК России). 3. Факт совершения нарушения таможенных правил предприятием, учреждением или организацией, а также лицом, занимающимся предпринимательской деятельностью без образования юридического лица. При невыполнении должностными лицами и иными работниками предприятия, учреждения или организации действующих в таможенном деле требований, за нарушение которых Таможенным кодексом установлена административная ответственность, а равно при невыполнении таких требований иными физическими лицами, выполняющими для предприятия, учреждения или организации работы по договорам гражданско-правового характера, к ответственности привлекаются указанные предприятия, учреждение или организация, за исключением случаев, когда правонарушение произошло вследствие действия непреодолимой силы (пункт 6 ст. 231 ТК России). Таким образом, следует установить, что противоправное действие либо бездействие совершено работником юридического лица при исполнении возложенных на него или принятых им на себя обязательств, касающихся таможенного дела. 4. Обстоятельства, влияющие на степень и характер ответственности лица, привлекаемого к ответственности за нарушение таможенных правил. Статьи 236 и 237 ТК РФ предусматривают ряд обстоятельств, смягчающих или отягчающих ответственность. Одни из них характеризуют особенности правонарушения (его объект, объективную сторону, субъект или субъективную сторону), другие - последующие действия правонарушителя. Все они имеют существенное значение для правильного разрешения дела, для определения степени и характера ответственности. Поэтому они обязательно подлежат доказыванию. 5. Причины и условия, способствовавшие совершению таможенных правонарушений. Зачастую они могут влиять на характер и степень ответственности, имеют существенное значение для правильного разрешения дела и подлежат доказыванию в обычном порядке. Их выявление необходимо также для проведения профилактических мероприятий и выработки мер борьбы с таможенными правонарушениями. Обстоятельства, подлежащие доказыванию, которые перечислены в статье 320 ТК, конкретизируются с учетом особенностей каждого дела о нарушении таможенных правил в зависимости от состава расследуемого правонарушения. Содержание предмета доказывания зависит также от особенностей отдельных категорий дел. В процессе установления истины по делу о нарушении таможенных правил нередко определенную значимость для него приобретают различного рода факты исторического, географического, экономического и социально-политического характера касательно полномочий, компетенции и порядка деятельности различных органов, учреждений и должностных лиц; факты, касающиеся разнообразных явлений, а также законов природы в жизни людей и т.д. Подобного рода факты именуются “общеизвестными” и не нуждаются в доказывании. Говоря общеупотребительными словами, предмет доказывания - это сердцевина, ядро или основа всех познаваемых по делу обстоятельств. Он включает в себя такие обстоятельства, которые непременно должны быть установлены посредством специальной процедуры административного доказывания. Необходимо отличать его от предмета исследования по делу о нарушении таможенных правил. Предметом исследования является совокупность подлежащих исследованию по делу доказательств, которые необходимо собрать, проверить и оценить для обеспечения всестороннего, полного и объективного установления имеющих значение для дела обстоятельств. Предмет исследования по каждому делу имеет свой объем, свои границы, которыми очерчиваются пределы исследования, именуемые обычно пределами доказывания. Понятие пределов доказывания тесно связано с понятием предмета доказывания. Вместе с тем оно далеко не тождественно ему. Если предмет доказывания включает в себя совокупность фактов и обстоятельств, подлежащих достоверному установлению по каждому делу посредством доказательств, то пределы доказывания представляют собой необходимую и достаточную совокупность доказательств, с помощью которой обеспечивается успешное решение задачи доказывания, достоверного установления всех обстоятельств, входящих в предмет доказывания. В то же время, поскольку необходимая и достаточная совокупность доказательств по делу добывается и исследуется посредством производства соответствующих процессуальных и иных действий, то в понятие пределов исследования, видимо, правомерно включать и саму совокупность, весь комплекс процессуальных и иных действий, с помощью которых обеспечивается успешное решение задачи получения и исследования необходимых и достаточных доказательств по делу. Правильное определение границ исследования или пределов доказывания имеет большое значение для обеспечения объективного, полного и всестороннего исследования обстоятельств дела, для решения задачи установления объективной истины по делу. Эти границы исследования зависят непосредственно от предмета доказывания, а также от особенностей каждого дела. На практике неверное определение пределов доказывания приводит к незакреплению или утрате данных, могущих являться доказательством по делу (например, об умышленном характере действий должностного лица или физического лица), что в конечном итоге влияет на принятие решений о привлечении не только к административной, но и к уголовной ответственности.Понятие доказательств В статье 321 ТК РФ дано развернутое определение доказательств, которое почти полностью соответствует определениям доказательств как в уголовно-процессуальном, так и административном праве (ст. 69 УПК РСФСР, ст. 230 КоАП РСФСР). Доказательствами по делу о нарушении таможенных правил являются любые фактические данные, на основе которых в определенном Кодексом и другим законодательством РФ порядке устанавливаются: а) наличие или отсутствие нарушения таможенных правил; б) виновность физического лица или должностного лица, привлекаемого к ответственности за нарушение таможенных правил; в) факт совершения такого правонарушения предприятием, учреждением или организацией, а также лицом, занимающимся предпринимательской деятельностью без образования юридического лица; г) иные обстоятельства, имеющие значение для правильного разрешения дела. Эти данные устанавливаются протоколами и другими документами, составленными при проведении таможенного контроля, производстве таможенного оформления, ведении производства по делу о нарушении таможенных правил или при его рассмотрении, объяснениями лица, привлекаемого к ответственности за нарушение таможенных правил, объяснениями свидетелей, заключениями эксперта, вещественными и письменными доказательствами. Под фактическими данными, о которых говорится в законе, следует понимать содержащиеся в доказательствах сведения, информацию о прошлых событиях. Фактические данные, согласно ТК, должны быть выражены или представлены в соответствующих источниках или формах, которыми могут быть: протоколы и другие документы, составленные при проведении таможенного контроля, производстве таможенного оформления, ведении производства по делу о нарушении таможенных правил или при его рассмотрении, объяснения лица, привлекаемого к ответственности, объяснения свидетелей, заключения эксперта, вещественные и письменные доказательства. В доказательстве, как в любом отражении, следует различать две главные его стороны - содержание и форму. Содержанием в доказательстве являются заключенные в нем сведения, то есть фактические данные, а формой, способом существования и выражения отображения - источник фактических данных. Так, например, содержанием показаний свидетеля будут сообщаемые на опросе свидетелем фактические данные, а формой - само сообщение, сделанное свидетелем на опросе и записанное в протоколе. Доказательство представляет собой единство фактических данных (знаний о предмете доказывания или иных обстоятельствах, имеющих значение для дела) и законного источника фактических данных (устного, письменного или вещественного), полученного и процессуально оформленного в материалах дела в установленном законом порядке. К доказательству предъявляются в соответствии с законом следующие основные требования: а) содержащиеся в нем данные должны быть не просто “данными”, но “фактическими данными”, то есть являться не абстрактными оценочными суждениями или мнениями, а достаточно конкретными данными о вполне конкретных действиях людей, об определенных событиях и т.п., позволяя отвечать на вопросы, что, где, когда, каким образом случилось или произошло; б) фактические данные должны быть относимыми к данному конкретному делу. Под относимостью доказательства понимается его способность подтверждать или опровергать определенное обстоятельство, подлежащее доказыванию по делу; в) способы получения и формы закрепления доказательства должны соответствовать виду доказательства и источнику фактических данных. Соответствие доказательств требованиям закона к его процессуальной форме принято называть допустимостью доказательств. Суть всех указанных требований закона состоит в том, чтобы доказательства по делу о нарушении таможенных правил были собраны уполномоченными на то должностными лицами, чтобы эти лица действовали в пределах предоставленных им ТК полномочий, с соблюдением установленных им способов, порядка и форм. Оценка доказательств Должностное лицо таможенного органа РФ, в производстве или на рассмотрении которого находится дело о нарушении таможенных правил, оценивает доказательства по своему внутреннему убеждению, основанному на всестороннем, полном и объективном рассмотрении всех обстоятельств дела в их совокупности, руководствуясь законодательством Российской Федерации. Никакие доказательства не имеют заранее установленной силы (статья 322 ТК). Оценка доказательств в совокупности предваряет собой готовность вынесения по делу постановления (решения). Однако оценке подлежит каждое отдельно взятое доказательство, относящееся к факту совершения нарушения таможенных правил. В оценке нуждаются все добытые фактические данные. В основу вынесения постановления без доказывания (анализа) могут быть положены такие факты, достоверность которых не вызывает сомнения (например, сведения о совершенных ранее правонарушениях, содержащихся в официальных справках, базах данных). Доказательства, положенные в основу постановления по делу о нарушении таможенных правил, нельзя делить по принципу “ценные” и “менее ценные”. Заключение эксперта, показания участников производства по делу о нарушении таможенных правил не могут быть положены в основу принятия решения, если они противоречат остальным доказательствам, материалам дела. Оценка доказательств по внутреннему убеждению исключает вмешательство других органов и должностных лиц, их давление на процесс формирования и состояние убеждения тех лиц, которые компетентны принимать решения по существу по своему убеждению. Оценка доказательств является весьма важным и необходимым элементом подготовки к вынесению решения по каждому конкретному делу. Умение всесторонне, полно и объективно оценивать доказательства оказывает влияние на законность принимаемых по делу решений. Классификация доказательств На основе присущих им свойств доказательства принято в теории делить на обвинительные и оправдательные, первоначальные и производные, прямые и косвенные. Обвинительными являются доказательства, могущие служить для изобличения лица, привлекаемого к ответственности за нарушение таможенных правил, или установление обстоятельств, отягчающих его ответственность. Оправдательными являются доказательства, могущие служить для установления невиновности физического лица или должностного лица, привлекаемого к ответственности за нарушение таможенных правил, отсутствия нарушения таможенных правил со стороны юридического лица или обстоятельств, смягчающих их ответственность. Первоначальными (или первичными) называют доказательства, полученные из первоисточника. Например, объяснения свидетеля - очевидца правонарушения, объяснения лица, привлекаемого к ответственности за нарушение таможенных правил, о собственных неправомерных действиях. Производными (или вторичными) называют доказательства, полученные не из первоисточника, а через посредствующее лицо, как бы из “вторых рук”. Так, производными будут показания лиц в случаях, когда они сообщают не о лично воспринятых фактах, а со слов других лиц, являющихся их очевидцами. Производными также будут копии документов, содержащих сведения относительно обстоятельств, подлежащих доказыванию по делу. Прямыми считают доказательства, которые своим содержанием однозначно подтверждают или опровергают существование любого из обстоятельств, подлежащих доказыванию по уголовному делу. Соответственно к косвенным относят доказательства, которые своим содержанием неоднозначно подтверждают или опровергают существование доказываемого обстоятельства по делу. Прямое доказательство отражает доказываемое обстоятельство таким образом, что значение его содержания по отношению к последнему допускает единственное истолкование. Косвенное доказательство отражает существование подтверждаемого или опровергаемого им обстоятельства совершенно иначе. Значение его содержания по отношению к последнему допускает не одно, а несколько различных истолкований. Выбор единственного его истинного значения осуществляется методом исключения всех остальных значений обязательно путем опоры на совокупность других доказательств по делу. Виды доказательств Авторы “Теории доказательств в советском уголовном процессе”, характеризуя деление доказательств по видам источников, отмечали, что в его основу “положено различие процессуальных способов собирания и закрепления доказательств, соответствующих специфике отдельных видов фактических данных.” Сказанное в полной мере относится и к доказательствам по делам о нарушении таможенных правил. На практике видами доказательств именуются перечисленные в статье 321 ТК РФ виды источников фактических данных: - протоколы и другие документы, составленные при проведении таможенного контроля, производстве таможенного оформления, ведении производства по делу о нарушении таможенных правил или при его рассмотрении; - объяснения лица, привлекаемого к ответственности за нарушение таможенных правил; - объяснения свидетелей; - заключения эксперта; - вещественные доказательства; - письменные доказательства. Протоколы и другие документы, составленные при проведении таможенного контроля, производстве таможенного оформления, ведении производства по делу о нарушении таможенных правил и при его рассмотрении Доказательствами по делу о нарушении таможенных правил являются составленные в порядке, предусмотренном ТК, протоколы и другие документы, удостоверяющие обстоятельства и факты, имеющие отношение к правонарушению: - установленные при проведении таможенного контроля и производстве таможенного оформления; - установленные при ведении производства по делу о нарушении таможенных правил и при его рассмотрении (ст. 323 ТК). Таким образом, предусмотренный в ст. 323 ТК самостоятельный вид доказательств законодатель подразделяет на две группы. Протоколы и другие документы, составленные должностными лицами таможенных органов Российской Федерации при проведении таможенного контроля и производстве таможенного оформления, могут содержать фактические данные как о действиях (бездействии) лица, привлекаемого к ответственности за нарушение таможенных правил, так и о мерах, предпринимаемых сотрудниками таможенных органов в отношении этих лиц, а также перемещаемых ими товаров и транспортных средств. При проведении таможенного контроля и производстве таможенного оформления могут составляться следующие документы: требование о присутствии при таможенном оформлении лица, обладающего полномочиями в отношении товаров и транспортных средств, о совершении им грузовых и иных операций; акт взятия проб и образцов товаров; акт досмотра товаров и транспортных средств, справки (рапорта, докладные записки и пр.) о проведении учета товаров и транспортных средств, проверке системы учета и отчетности, проведении осмотра помещений и территорий и др.; акт проверки финансово - хозяйственной деятельности; документы, составленные при проведении таможенного контроля после выпуска товаров и транспортных средств; акты инвентаризации товаров и транспортных средств, находящихся под таможенным контролем, а также другие документы, определенные ТК и нормативными актами ГТК России. Все перечисленные документы составляются при проведении таможенного контроля и производстве таможенного оформления, то есть до заведения дела о нарушении таможенных правил. На них не распространяются требования законодательства, предъявляемые к процессуальным действиям должностных лиц при производстве по делам о нарушении таможенных правил, и многие из них не имеют строго установленной формы. Однако это не исключает предъявления к ним определенных требований по способу фиксации, как на законодательном уровне, так и нормативно - технологическом. Указанные документы ценны, прежде всего, своим содержанием, поскольку отражают обстоятельства, возникающие непосредственно при отправлении таможенными органами своих функций, и, следовательно, позволяют сделать вывод о наличии тех или иных правоотношений между таможенными органами и лицом, привлекаемым к ответственности за нарушение таможенных правил. Единство содержания и формы (процессуального способа собирания и закрепления доказательства) достигается при приобщении таких протоколов и других документов к делу о нарушении таможенных правил, которое осуществляется при составлении протокола о нарушении таможенных правил либо путем истребования документов после заведения дела в таможенном органе или том его структурном подразделении, которое проводило таможенный контроль и/или производило таможенное оформление. Экземпляры таких документов могут находиться у правонарушителя и других лиц (например, при направлении требования, вручении акта проверки). В этом случае они могут приобщаться к делу как путем истребования, так и при проведении изъятия или иных процессуальных действий. Протоколы и другие документы, составленные при проведении таможенного контроля и производстве таможенного оформления, отличаются от письменных доказательств по делу о нарушении таможенных правил тем, что в них фиксируются действия должностных лиц таможенных органов Российской Федерации при осуществлении контрольных функций, возложенных на них законом. Акты, справки, письменные сообщения и другие документы составляются другими государственными органами либо предприятиями, учреждениями или организациями, а также лицами, занимающимися предпринимательской деятельностью без образования юридического лица, физическими лицами или должностными лицами, деятельность которых контролируется таможенными органами. Протоколы, составленные должностными лицами таможенных органов РФ при ведении производства по делу о нарушении таможенных правил и при его рассмотрении, которыми удостоверяются обстоятельства и факты, установленные при осмотре, изъятии товаров, таможенном обследовании, предъявлении для опознания, взятия проб и образцов для сравнительного исследования, наложении ареста на имущество, составленные в порядке, предусмотренном законом, являются самостоятельной группой этого вида доказательств. Ее общей особенностью является то, что доказательство в этом случае содержит фактические данные, непосредственно воспринятые должностным лицом таможенного органа, обнаруженные и наблюдавшиеся им самим при проведении конкретного процессуального действия. Если же в протоколе процессуального действия содержатся сведения, полученные от других лиц (протоколы опросов лица, привлекаемого к ответственности, свидетеля), то этот протокол относится к иному виду доказательств (объяснения лица, привлекаемого к ответственности, объяснения свидетеля). Для рассматриваемого вида доказательства существенны еще два признака, относящиеся к способу их получения: - они могут быть получены только в процессе производства по делу о нарушении таможенных правил путем совершения процессуального действия; - фактические данные, содержащиеся в протоколе, должны быть закреплены в порядке, предусмотренном ТК России, должностным лицом, уполномоченным на совершение процессуального действия. Объективность протоколов таких процессуальных действий по закону подтверждают понятые. Проверка и оценка протоколов и других документов, несмотря на то, что они происходят от должностных лиц таможенных органов, осуществляются на тех же основаниях, что и всех иных видов доказательств, так как они не имеют заранее установленной силы и не исключено, что в них могут содержаться искажения, ошибки, неточности. К протоколам процессуальных действий предъявляются высокие требования в части строгого соблюдения процессуальных норм, определяющих порядок их производства и фиксации. Протокол процессуального действия должен быть составлен только правомочным должностным лицом. В нем должны присутствовать все необходимые по закону атрибуты, в том числе подписи участвовавших в процессуальном действии лиц. При проверке и оценке этого вида доказательств учитывается, насколько его документы корреспондируются с другими доказательствами, и правовая логичность соответствующих протоколов, наличие в них данных о разъяснении участникам процессуального действия права делать замечания по поводу произведенных действий, а также содержание подобных замечаний. В отдельных случаях должностное лицо таможенного органа, рассматривающее дело, проверяя правильность протокола процессуального действия, вправе вызвать и опросить понятых, присутствовавших при процессуальном действии и подписавших протокол. Объяснения лица, привлекаемого к ответственности за НТП Объяснения лица, привлекаемого к ответственности за нарушение таможенных правил, - это сообщение физическим лицом или должностным лицом фактических данных по поводу вменяемого ему в вину нарушения таможенных правил, либо органов (представителей) юридического лица по поводу признания его совершившим нарушение таможенных правил, иных известных им обстоятельств по делу и имеющихся в дел доказательств, сделанное во время опроса в установленном законом порядке. Как и другие доказательства, объяснения лица, привлекаемого к ответственности за нарушение таможенных правил, используются таможенными органами для установления истины по делу о нарушении таможенных правил. В то же время его права, предусмотренные статьей 324 ТК, давать объяснения по поводу его привлечения к ответственности, а равно относительно иных, известных ему обстоятельств по делу и имеющихся в деле доказательств, являются одним из элементов права обвиняемого на защиту. Привлекаемое к ответственности лицо всегда, более чем какое-либо другое, заинтересовано в исходе дела о нарушении таможенных правил. На содержание его объяснений влияют преследуемые им цели (избежать наказания, добиться смягчения ответственности и т.д.). Лицо, привлекаемое к ответственности за нарушение таможенных правил, не несет административной ответственности за отказ или уклонение от дачи объяснений. Он вправе как полностью отказаться от дачи объяснений, так и не ответить на вопросы, ставящие его в затруднительное положение. Объяснения лица, привлекаемого к ответственности за нарушение таможенных правил, подлежат проверке и оценке наряду с другими собранными по делу доказательствами. Заведомая заинтересованность привлекаемого к ответственности лица в исходе дела обязывает должностное лицо таможенного органа к критической проверке и оценке этого вида доказательств. Вместе с тем объяснения такого лица обладают ценными свойствами и во многих случаях служат эффективным средством установления истины. Оно наиболее полно и точно осведомлено об обстоятельствах совершения правонарушения, его мотивах, знает о причастных к нему лицах и т.п. Правдивые показания лица, привлекаемого к ответственности за нарушение таможенных правил, признавшего свою вину или факт совершения нарушения таможенных правил, - одно из средств полного раскрытия правонарушения, собирания и проверки других доказательств по делу. Привлекаемое к ответственности лицо не только дает объяснения по интересующим таможенные органы вопросам, но и подвергает критике, оценивает со своей стороны другие доказательства, собранные по делу, что должно способствовать формированию у должностного лица таможенного органа объективного представления о расследуемом правонарушении. На практике встречаются случаи, когда лицо, привлекаемое к ответственности за нарушение таможенных правил, после заведения дела о нарушении таможенных правил опрашивается в качестве свидетеля по поводу его собственных действий или действий других лиц, чьи интересы он представляет (защищает), с предупреждением об административной ответственности за отказ или уклонение от дачи объяснений. Совершение таких действий при ведении производства по делам о нарушении таможенных правил абсолютно недопустимо, поскольку опрос в качестве свидетеля привлекаемого к ответственности лица (его адвоката, представителя) лишает его возможности осуществить свое право на защиту и поэтому не может быть признано соответствующим процессуальным требованиям ТК. Объяснения свидетеля Объяснения свидетеля - это сообщение лицом известных ему фактических данных об обстоятельствах, подлежащих установлению по делу, сделанное во время опроса в установленном законе порядке. Этот вид доказательства используется по всем делам о нарушении таможенных правил и относится к числу наиболее распространенных. Круг свидетелей ТК определен широко. Он не содержит ограничений для опроса в качестве свидетеля в зависимости от возраста, пола, служебного положения свидетеля, гражданства, его специфических отношений с лицом, привлекаемым к ответственности за нарушение таможенных правил. Согласно статье 314 ТК, в качестве свидетеля для дачи объяснений может быть вызвано любое лицо, которому могут быть известны какие-либо обстоятельства, подлежащие установлению по делу о нарушении таможенных правил. Не могут опрашиваться в качестве свидетеля: - адвокат и оказывающий юридическую помощь представитель лица, привлекаемого к ответственности за нарушение таможенных правил, об обстоятельствах, которые стали им известны в связи с оказанием таких услуг и помощи; - лицо, которое в силу своих физических или психических недостатков не способно правильно воспринимать обстоятельства, имеющие значение для дела, и давать им правильные объяснения. Супруг и близкие родственники физического лица или должностного лица, привлекаемого к ответственности за нарушение таможенных правил, освобождаются от обязанности давать объяснения. Не могут опрашиваться в качестве свидетелей участники административного процесса: лицо, привлекаемое к ответственности за нарушение таможенных правил, эксперт. Интересующие должностное лицо таможенного органа сведения они сообщают в форме объяснения лица, привлекаемого к ответственности за нарушении таможенных правил, заключения эксперта. Опрос в качестве свидетелей сотрудников таможенных органов, осуществлявших функции по таможенному контролю и таможенному оформлению, в результате которых выявлено правонарушение, пресекавших противоправные действия, принимавших участие в задержании, вполне допустим, а зачастую и необходим. Свидетель может быть опрошен о любых обстоятельствах, подлежащих установлению по делу о нарушении таможенных правил, в том числе о личности физического лица или должностного лица, привлекаемого к ответственности за нарушение таможенных правил, и о своих взаимоотношениях с ним. Не могут служить доказательствами фактические данные, сообщаемые свидетелем, если он не может указать источник своей осведомленности (ст. 325 ТК). Предположения, догадки свидетеля по поводу тех или иных обстоятельств дела, возможного развития событий и т.п. доказательствами не являются, в отличие от конкретных фактических данных, на которых они основаны. Свидетель не обязан высказывать свое мнение по поводу обстоятельств, устанавливаемых по делу, и предусмотренной статьей 442 ТК ответственности за отказ отвечать на соответствующие вопросы не несет. В тех случаях, когда обязанность свидетеля дать объяснения приходит в противоречие с установленной для него законом обязанностью хранить в тайне те или иные сведения, опрос свидетеля по поводу этих сведений должен производиться лишь после получения разрешения от соответствующего органа или должностного лица. Экспертиза, заключение эксперта Заключение эксперта - это представленные по поручению должностного лица таможенного органа Российской Федерации в установленном законом порядке мотивированные выводы лица, обладающего специальными познаниями в науке, искусстве, технике или ремесле, об обстоятельствах, существенных для дела, полученные в результате их исследования с применением этих познаний. Заключение эксперта - весьма своеобразный и получающий все более широкое применение в правоприменительной деятельности вид доказательств. Согласно статье 326 ТК экспертиза назначается в случае, если для разъяснения возникающих вопросов требуются специальные познания в науке, искусстве, технике или ремесле. Необходимость привлечения специальных познаний для выяснения обстоятельств дел о нарушении таможенных правил обусловлена разнообразием правонарушений, обстановкой их совершения, когда правильное установление фактов невозможно без обращения к содействию лиц, владеющих необходимыми специфическими знаниями и методами исследования. Даже в тех случаях, когда должностное лицо таможенное органа обладает какими-либо специальными познаниями, необходимыми для выяснения тех или иных обстоятельств дела, закон не позволяет ему принимать на себя функции эксперта. Это обусловлено необходимостью квалифицированного, тщательного и объективного производства экспертизы с созданием необходимых гарантий для всесторонней критической проверки и оценки заключения эксперта как доказательства, опирающегося на специальные познания постороннего по отношению к делу лица. Экспертиза назначается в случаях, когда необходимы специальные познания в любой отрасли знаний, кроме права. Решение правовых вопросов, подлежащих разрешению при производстве по делу, образует исключительную компетенцию должностного лица таможенного органа, в производстве или на рассмотрении которого находится дело о нарушении таможенных правил. К их числу относятся вопросы о виновности или невиновности физических лиц или должностных лиц в совершении правонарушения, вопросы толкования действующего материального и процессуального права и т.д. Экспертиза проводится экспертами таможенных лабораторий и других соответствующих учреждений либо иными специалистами, назначенными должностным лицом таможенного органа, в производстве или на рассмотрении которого находится дело о нарушении таможенных правил. В качестве эксперта может быть вызвано любое физическое лицо, обладающее необходимыми познаниями для дачи заключения. Решение о назначении экспертизы обязательно для эксперта, которому этим решением поручена экспертиза, и для должностных лиц предприятий, учреждений или организаций, где работает эксперт. Вопросы, поставленные перед экспертом, и его заключение не могут выходить за пределы специальных познаний эксперта. Эксперт дает заключение в письменной форме от своего имени. В заключении эксперта излагаются проведенные им исследования, сделанные в результате их выводы и обоснованные ответы на поставленные вопросы. Если эксперт при производстве экспертизы установит имеющие значение для дела обстоятельства, по поводу которых ему не были поставлены вопросы, он вправе включить выводы об этих обстоятельствах в свое заключение. Заключение эксперта опирается на имеющиеся в деле фактические данные, является результатом исследования материальных объектов или отраженных в деле сведений. Но во всех случаях оно имеет своим содержанием новые фактические данные, существенные для дела, полученные в результате экспертизы с применением специальных познаний сведущим лицом. Опираясь на результаты собственного исследования представленных ему объектов, эксперт или обнаруживает новые факты, ранее по делу неизвестные, или точно устанавливает факты, лишь предполагавшиеся или выясненные приблизительно, или же дает оценку тех или иных фактов через специальные познания, которыми он располагает. Другим важным моментом в характеристике заключения эксперта как доказательства является то, что оно не только содержит фактические данные, но и сообщает те сведения из специальной отрасли знания, на основании которых эксперт их выяснил, пришел к определенным выводам. Заключение эксперта, как и любое иное доказательство, может проверяться и оцениваться путем сопоставления его с другими доказательствами, установленными по делу фактическими данными. Заключение эксперта не яв
Воспользуйтесь нашим такси! Цены и качество приятно удивят.