Configurando o ambiente
Nesta seção, listarei todas as etapas pelas quais tive que seguir para deixar meu Mac pronto para a codificação com a pilha que escolhi. Esperançosamente, isso será uma economia de tempo útil para quem decidiu fazer o mesmo. Se você encontrou esta página primeiro, não terá que fazer nenhuma pesquisa. Basta seguir meus passos e em poucos minutos (sem incluir o download robusto do Xcode da Apple) você estará instalado e funcionando, pronto para a ação 🙂
Configurando o Localhost
Ainda uso o OS X 10.7 (Lion), portanto, isso pode não ser aplicável ao seu ambiente se você estiver usando uma versão mais recente do OS X. Primeiro, apaguei a ~/Sites
pasta dentro da minha pasta pessoal e, em seguida, criei uma pasta vinculada com o mesmo nome apontando para a /Library/WebServer/Documents
pasta usando o seguinte comando do Terminal:
sudo ln -s ~/Sites /Library/WebServer/Documents
Dessa forma, ao digitar http: // localhost na janela do navegador, ele apontará para o conteúdo da sua ~/Sites
pasta.
Instalando Ferramentas para Desenvolvedores para Mac
Você precisará instalar as Ferramentas do desenvolvedor para Mac, instaladas como parte do Xcode. O Xcode está disponível gratuitamente – um download bem grande, mas você precisará dele.
Instalando o Homebrew
Para configurar toda a pilha que vamos usar, você teria que instalar vários pacotes manualmente, um trabalho muito tedioso que prefiro ignorar. Alternativamente, tudo o que você precisa fazer é instalar o Homebrew , um gerenciador de pacotes muito útil para OS X. Para instalar o Homebrew, simplesmente copie e cole a seguinte linha na janela do Terminal:
ruby -e "$(curl -fsSL https://raw.github.com/Homebrew/homebrew/go/install)"
O Homebrew instala pacotes em seu próprio diretório e, em seguida, vincula simbolicamente seus arquivos a /usr/local
.
Instalando Node.js
Assim que o Homebrew estiver instalado, você pode prosseguir e instalar o Node.js
brew install node
Fácil, certo? A seguir, vamos verificar se o Node.js está funcionando corretamente. Dentro de sua ~/Sites
pasta, crie um hello-node.js
arquivo e copie o seguinte conteúdo nele:
var http = require('http');
http.createServer(function (req, res) {
res.writeHead(200, {'Content-Type': 'text/plain'});
res.end('Hello Node.js\n');
}).listen(8124, "127.0.0.1");
console.log('Server running at http://127.0.0.1:8124/');
Em seguida, execute este código a partir da linha de comando com:
cd ~/Sites
node hello-node.js
Você deve ver a seguinte mensagem na janela do Terminal:
Server running at http://127.0.0.1:8124/
Em seguida, navegue para http://127.0.0.1:8124/ em seu navegador, você deve ver a mensagem “Hello Node.js”.
Instalando npm
npm é o gerenciador de pacotes do Node. Agora ele é instalado automaticamente com Node.js, portanto, não há necessidade de fazer uma instalação separada.
Instalando Express.js
Com o Node.js e o npm já instalados, incluir o Express em um aplicativo da web é apenas uma questão de indicar a dependência do Express em seu package.json
arquivo de aplicativo .
Dentro da pasta do seu aplicativo (ou seja ~/Sites/HelloWorld
), crie um arquivo com package.json
o seguinte nome :
{
"name": "hello-world",
"description": "hello world test app",
"version": "0.0.1",
"private": true,
"dependencies": {
"express": "3.x"
}
}
Agora que você definiu as dependências do seu aplicativo, use o npm para instalá-las todas:
npm install
Uma vez NPM acabamentos, você terá um 3.x dependência expresso localizada no ./node_modules
diretório. Você pode verificar isso com
npm ls
que exibirá uma árvore com todas as dependências do aplicativo, neste caso apenas Express e suas próprias dependências.
Para testar Express.js, sugiro passar pelo exercício explicado aqui na seção Primeiros passos, até o início do guia.
Instalando Neo4J
Usando o Homebrew , para instalar a versão estável mais recente do Neo4j Server, emita o seguinte comando
brew install neo4j
Assim que a instalação for concluída, você pode iniciar o Neo4J a partir da linha de comando com:
neo4j start
Isso fará com que uma instância do Neo4j seja executada em http: // localhost: 7474 . Basta navegar até esse URL com seu navegador para acessar o utilitário do navegador de banco de dados, que também inclui alguns tutoriais:
Organização do aplicativo
Ao construir um aplicativo de página única com AngularJS , iremos construir essencialmente duas peças:
- O cliente , com todo o JavaScript , HTML , CSS e vários arquivos de ativos necessários para que o front-end do aplicativo seja executado no navegador da máquina cliente.
- O servidor , com todos os arquivos JavaScript necessários para rodar o servidor web em cima do Express / Node.js , que atenderá as solicitações do aplicativo cliente (GETs, POSTs, PUTs, etc.), conectando o cliente à camada de persistência Neo4J .
Durante o desenvolvimento, sua máquina desempenhará as funções de cliente e servidor, com:
- o servidor da web rodando localmente no localhost em uma porta especificada (tradicionalmente na porta 3000 ),
- o banco de dados rodando localmente no localhost na porta 7474
- o aplicativo cliente rodando localmente em localhost na porta 80
Depois de ler muitos artigos, postagens de blog e perguntas no Stackoverflow sobre como organizar todos esses arquivos, deixe-me mostrar a estrutura que adotei, inspirada em https://github.com/angular-app/angular-app e em http://briantford.com/blog/huuuuuge-angular-apps.html .
No nível superior, subdividi o aplicativo em seus dois componentes principais, cliente e servidor . Eu também adicionei uma pasta * client-tests ** que planejava usar para testes de unidade. Que vergonha, eu realmente não usei. Talvez da próxima vez: (*
Dentro da pasta do cliente , estruturei o aplicativo da seguinte maneira (pastas em negrito , arquivos em itálico ):
- cliente
- ativos
- imagens
- scripts
- controladores
- diretivas
- filtros
- Serviços
- fornecedor
- app.js
- estilos
- Visualizações
- index.html
- ativos
No lado do servidor do aplicativo, esta é a estrutura de pastas interna (pastas em negrito , arquivos em itálico ):
- servidor
- node_modules (criado por npm )
- rotas
- package.json
- server.js
No final das contas, não há maneira certa de fazer isso. Cada um tem sua maneira, alguns gostam de agrupar arquivos por tipo (todos os controladores juntos, todas as diretivas juntas, etc.), alguns gostam de agrupá-los por funcionalidade. Há prós e contras em ambas as abordagens, então fique à vontade para escolher aquela que fizer mais sentido para você. Você sempre poderá mover as coisas mais tarde, se estiver limitado por sua estrutura.
Parabéns!
Você está pronto para entrar em ação! Espero que você tenha achado este post útil. Levei um tempo para reunir todas as informações de que precisava para chegar a este ponto. Espero que este resumo ajude você a economizar algum tempo e seja capaz de chegar à parte divertida mais cedo 🙂
Alguns presentes opcionais
Se, como eu, você decidiu usar o Sublime Text (versão 2 ou 3), se ainda não o fez, pode instalar o Sublime Package Control . A instalação é simples e leva apenas alguns segundos. Vá para a página de instalação e copie o script correto para sua versão do Sublime Text no console do Sublime Text.
Uma vez instalado, basta abrir a Paleta de Comandos (cmd + shift + p),
selecionar “Instalar Pacote” e selecionar “Cypher”. Isso instalará o Sublime Cypher , destaque de sintaxe para a linguagem de consulta Cypher do Neo4j em Sublime Text. Você vai querer nomear seus arquivos cifrados com a .cql
extensão para que o realce de sintaxe os reconheça.
No instalador de pacotes do Sublime Text, você também encontrará o pacote AngularJS , que também pode ser instalado.
Dica para novatos do Neo4J: como redefinir seu banco de dados
Se você for como eu, especialmente durante sua fase de aprendizado de desenvolvimento com o Neo4J, você se verá construindo alguns gráficos básicos “à mão” como ponto de partida e executando consultas criptografadas que irão, mais cedo ou mais tarde, bagunçar seu gráfico.
Nesse ponto, você tem duas opções:
- conserte manualmente as partes do gráfico que foram afetadas para voltar a um bom estado e continuar o desenvolvimento
- redefina seu banco de dados para um estado inicial bem conhecido
Eu fiz o # 1 e fiquei entediado rapidamente com isso. Finalmente descobri a melhor maneira de fazer o # 2.
Primeiro, escreva um script .cql que construa o “estado conhecido” para o qual você deseja poder voltar. Pode ser apenas alguns nós e relacionamentos ou uma estrutura muito mais complexa. Seja o que for, todo o script deve ser parecido com o seguinte:
START n = node(*)
MATCH n-[r]-()
DELETE n, r
WITH COUNT(n) AS hack
CREATE
(Neo:Crew { name:'Neo' }),
(Morpheus:Crew { name: 'Morpheus' }),
(Trinity:Crew { name: 'Trinity' }),
(Cypher:Crew:Matrix { name: 'Cypher' }),
(Smith:Matrix { name: 'Agent Smith' }),
(Architect:Matrix { name:'The Architect' }),
(Neo)-[:KNOWS]->(Morpheus),
(Neo)-[:LOVES]->(Trinity),
(Morpheus)-[:KNOWS]->(Trinity),
(Morpheus)-[:KNOWS]->(Cypher),
(Cypher)-[:KNOWS]->(Smith),
(Smith)-[:CODED_BY]->(Architect)
As primeiras linhas do script eliminam todos os nós e relacionamentos do banco de dados. Em seguida, vem o CREATE
comando longo , que reconstrói o “estado conhecido” que precisa ser recuperado.
A única ressalva ao fazer isso é que o banco de dados ainda será o mesmo. Isso significa, por exemplo, que os IDs dos nós continuarão aumentando sempre que você executar novamente o script acima. Se você realmente deseja redefinir seu banco de dados, apenas mude para o Terminal e execute o seguinte antes de executar o script cypher acima:
cd /usr/local/Cellar/neo4j/2.0.0/libexec/data
neo4j stop
rm -rf graph.db/
neo4j start
Isso irá parar o servidor de banco de dados, remover completamente a pasta de dados da qual depende e, em seguida, reiniciar o servidor, que se reinicializará e criará uma nova pasta de dados com o mesmo nome no mesmo local exato.
Nota
Acredito que ter esses “scripts de redefinição” à mão será muito útil quando você estiver trabalhando em vários projetos ao mesmo tempo. Claro que você poderia ter vários servidores Neo4J em execução em sua máquina, um para cada projeto em que você trabalha, mas sinto que depois de um tempo pode se tornar inviável fazer isso. Portanto, ao alternar o desenvolvimento do projeto, tudo o que você precisa fazer é remover a pasta de dados do banco de dados conforme mostrado acima e, em seguida, executar o script de redefinição do código do projeto.