Pergunta

Eu tenho várias aplicações (uma aplicação admin, um "público" application / não-administrador e um aplicativo de serviço web) que todos compartilham um único banco de dados.

Eu recebi os pedidos de modelos de ações e de outros códigos se for o caso, então eu não tenho várias cópias do mesmo código em cada um. No entanto, a única tarefa que eu ainda tenho que configure é como compartilhar arquivos que são enviados entre as aplicações. Estou usando Paperclip para carregar com sucesso arquivos para minhas aplicações, mas se ele faz o upload dos arquivos para o aplicativo fazendo o upload.

Idealmente, eu gostaria de ser capaz de atender a todos os arquivos do serviço de web. Minha idéia era que eu iria precisar de algum tipo de tarefa executada toda vez que um novo ficheiro é enviado para qualquer um dos aplicativos para que o arquivo criado na estrutura do serviço web arquivo.

Eu sei que poderia facilmente realizar servir arquivos a partir de uma única aplicação se eu carregado os arquivos para o banco de dados (que é como eu conseguido isso em uma suíte de aplicativos similar), mas não tenho certeza se esse é o melhor caminho a percorrer para gerenciar / servindo os arquivos. Outra idéia que eu tinha era armazenar os arquivos no banco de dados e ter o serviço web gerenciar "servir"-los e tê-lo criar o arquivo no disco na primeira solicitação. Após a primeira solicitação para o arquivo, o serviço web serviria o arquivo a partir do disco, em vez da partir do banco de dados.

Alguém tem alguma idéia sobre qual é a melhor maneira de conseguir isso pode ser? Ou alguma idéia melhor?

Obrigado antecipadamente por qualquer qualquer um gabarito pode ter sobre o assunto.

Foi útil?

Solução

eu recomendo colocá-los em um local compartilhado que é servido diretamente pelo seu servidor web front-end (não Rails) se você tem esse tipo de configuração, neste exemplo é servir-se um local chamado arquivos que aponta para uma pasta no disco. Então, em suas opções clipe, alterar o local de salvamento.

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

Outras dicas

Você está executando todos os aplicativos no mesmo sistema UNIX / Linux? Você já tentou criar links simbólicos para compartilhar a pasta que contém as imagens? O objetivo é salvar todas as imagens para o mesmo local. Eliminando a necessidade de jogar em ganchos complicadas para a criação de anexos.

Paperclip por lojas padrão coisas em: RAILS_ROOT / public / system /: attachment /: id /: / estilo: filename Se você está compartilhando um banco de dados que você não terá que se preocupar com as colisões. E você só precisa criar uma pasta de sistema para ser usado por cada aplicativo.

Você pode usar pasta pública / sistema de um aplicativo como o mestre, ou criar um sistema totalmente novo. Deste ponto em diante todas as outras pastas do sistema que não é o único mestre será encaminhado ao escravo pastas. Uma vez que você tenha escolhido o seu mestre é tão simples como mover tudo em cada pasta escravo para a pasta mestre. Excluindo as pastas de escravos e substituí-los por um link simbólico para a pasta mestre.

conjunto de comando exemplo para migrar e substituir com link simbólico dado os padrões clipe de papel. É provavelmente uma boa idéia para parar o servidor antes de tentar isso.

$ 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

Uma vez que você tem certeza de que a migração for bem sucedida você pode remover o backup:

$ rm /path/to/slave/project/public/system.bak
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top