Question

Je dispose de plusieurs applications (une application d'administration, un "public" / application non-admin et une application de service Web) que tous partagent une seule base de données.

J'ai eu les applications de partager des modèles et autres codes, le cas échéant, donc je n'ai pas plusieurs copies du même code dans chacun. Cependant, une tâche que je n'ai pas encore configurer est comment partager des fichiers qui se téléchargés entre les applications. J'utilise Paperclip pour télécharger des fichiers avec succès à mes applications, mais si elle télécharge les fichiers à l'application faire le téléchargement.

Idéalement, je voudrais être en mesure de servir tous les fichiers du service Web. Mon idée était que je besoin d'un certain type de tâche exécutée chaque fois qu'un nouveau fichier est téléchargé sur l'une des applications d'avoir le fichier créé dans la structure de fichiers du service Web.

Je sais que je pourrais faire facilement servir des fichiers à partir d'une seule application si je charge les fichiers dans la base de données (ce qui est la façon dont j'accompli cela dans une suite d'applications similaire), mais je ne sais pas si c'est la meilleure voie à suivre pour gérer / traiter les fichiers. Une autre idée que j'avais stockait les fichiers dans la base de données et ayant le service Web gérer « servir » les et l'avoir créer le fichier sur le disque sur la première demande. Après la première demande du dossier, le service Web servirait le fichier à partir du disque plutôt que de la base de données.

Quelqu'un a des idées sur ce que la meilleure façon d'y parvenir est peut-être? Ou de meilleures idées?

Merci d'avance pour toute quiconque pourrait avoir des commentaires sur le sujet.

Était-ce utile?

La solution

Je vous recommande de les mettre dans un emplacement partagé qui est servi directement par votre serveur Web avant (pas Rails) si vous avez ce genre de configuration, dans cet exemple, il est au service des un emplacement des fichiers appelés qui décrit un dossier disque. Ensuite, dans les options de Paperclip, changer l'emplacement de sauvegarde.

has_attached_file :image,  
   :url => "/files/:basename.:extension",  
   :path => "/var/htdocs/public/files/:basename.:extension" 

Autres conseils

Vous exécutez toutes les applications sur le même système UNIX / Linux? Avez-vous essayé de créer des liens symboliques pour partager le dossier contenant les images? Le but est d'enregistrer toutes les images au même endroit. L'élimination de la nécessité de jeter des crochets compliqués pour la création d'attache.

Paperclip par les magasins par défaut des choses à: RAILS_ROOT / public / système /: pièce jointe /: id /: Style /: nom de fichier Si vous partagez une base de données que vous ne serez pas à vous soucier de collisions. Et il vous suffit de créer un dossier de système à utiliser par chaque application.

Vous pouvez utiliser le dossier public / système d'une application en tant que maître, ou créer un tout nouveau. De ce point sur tous les autres dossiers du système qui ne sont pas le maître un sera appelé esclave dossiers. Une fois que vous avez choisi votre maître, il est aussi simple que de déplacer tout dans chaque dossier esclave dans le dossier maître. Suppression des dossiers esclaves et en les remplaçant par un lien symbolique dans le dossier principal.

Exemple de commande mis à migrer et à le remplacer par un lien symbolique étant donné les valeurs par défaut du trombone. Il est probablement une bonne idée d'arrêter le serveur avant d'essayer cela.

$ mv /path/to/slave/project/public/system/* /path/to/master/system
$ mv /path/to/slave/project/public/system.bak
$ ln -s /path/to/master/system /path/to/slave/project/public/system

Une fois que vous êtes sûr que la migration est réussie, vous pouvez supprimer la sauvegarde:

$ rm /path/to/slave/project/public/system.bak
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top