Se você atualizou o Firefox para as versões 4, 5 ou 6 provavelmente está tendo problemas para rodar testes de Cucumber com o Selenium Webdriver, obtendo o erro abaixo:
unable to obtain stable firefox connection in 60 seconds ( ) (Selenium::WebDriver::Error::WebDriverError)
Para corrigir “paliativamente” e continuar a rodar meus testes fiz o downgrade do Firefox para versão 3.6.19 executando os passos abaixo:
1) Precisei limpar completamente a versão anterior do Firefox usando o AppCleaner que é free;
2) Encontrei as versões anteriores do FF no OldApps.com;
3) Desabilitei o update de versões do FF em Preferences/Advanced/Update
Quem estiver como este mesmo problema no Ubuntu pode resolver com ajuda deste dois posts:
http://blog.troyastle.com/2011/06/downgrade-to-firefox-36-on-ubuntu-natty.html
Esses dias configurei meus sistemas operacionais para usar RVM que serve para gerenciar diferentes instalações do Ruby na mesma máquina.
Para instalar no Snow Leopard segui o tutorial do Akita “Limpando meu Ambiente de Desenvolvimento” e para instalar no Ubuntu segui o post do Barenko “Preparando o Ubuntu para múltiplos ambientes Ruby utilizando RVM” que é mais ou menos uma “tradução” do post do Akita para Ubuntu. Deixei tudo igual com exceção da linha onde tem “/var/lib/gems/1.8/bin/rvm-install” que alterei para
~/rvm-install
Porém como eu uso Git uma coisa que estava me incomodando é que o prompt do Bash em ambos SO não estavam adequados para mostrar a versão da RVM e o branch atual do Git ao mesmo tempo, então fiz algumas e alterações e encontrei algumas “frescuras a mais” para personalizar o prompt.
Substitua a linha que começa com “expost PS1=’….” no arquivo ~/.bashrc (Ubuntu) ou ~/.bash_profile (MacOS) para:
sudo gedit ~/.bashrc
export PS1='\[\033[38m\]\u\[\033[32m\] \w \[\033[1;33m\]`~/.rvm/bin/rvm-prompt i v `\[\033[0;31m\] `git branch 2> /dev/null | grep -e ^* | sed -E s/^\\\\\*\ \(.+\)$/\(\\\\\1\)\ / `\[\033[37m\]$\[\033[00m\] '
Com isto o prompt ficará assim
seu_usuario ~/projetos/blog ruby-ree ( working ) $
Segue uma tabela com as cores existentes, se você quiser deixar a fonte em negrito use 1; ao invés de 0;
"\033[0;32m" "\033[1;32m"
Cores
corPadrao=”\033[0m”
preto=”\033[0;30m”
vermelho=”\033[0;31m”
verde=”\033[0;32m”
marrom=”\033[0;33m”
azul=”\033[0;34m”
purple=”\033[0;35m”
cyan=”\033[0;36m”
cinzaClaro=”\033[0;37m”
amarelo=”\033[0;33m”
branco=”\033[1;37m”
Aproveitando que este post é sobre RVM, se alguém tiver dificuldades em rodar o script/console dentro de algum ambiente de RVM dá uma olhada neste post que tem uma solução para este problema.
Referências:
Limpando meu Ambiente de Desenvolvimento
Preparando o Ubuntu para múltiplos ambientes ruby utilizando RVM
http://ubuntuforums.org/archive/index.php/t-31247.html
http://www.vivaolinux.com.br/dica/Shell-script-com-texto-colorido
Assim como o MySql o MongoDB tem um shell para manipular dados diretamente na base, seguem os comandos (CRUD) básicos para inserir, buscar, atualizar e apagar documentos.
Para inicializar o shell:
/opt/mongo/bin/./mongo
Se tiver algum problema com este comando então faça isto:
cd /opt/mongo/bin/
./mongo
As linhas abaixo serão exibidas:
MongoDB shell version: 1.3.3-
url: test
connecting to: test
type "help" for help
>
Os comandos iniciais são:
| show dbs | Mostra todas as bases de dados |
| use dbname | Aponta a váriavel “db” para a base digite no lugar de dbname |
| show collections | Exibi as coleções da base em uso. As collections “equivalem” as tables nos bancos relacionais. |
| db.collection_name.insert(object) | Cria um documento |
| db.collection_name.find() | Exibi os documentos da coleção |
| db.collection_name.update(criteria_object_or_pair_key_value) | Atualiza um documento com o critério ou chave par/valor definido |
| db.collection_name.remove(criteria_object_or_pair_key_value) | Remove um ou mais documentos com o critério ou chave par/valor definido |
Vamos à prática para exemplificar os comandos acima. Abaixo estamos verificando as bases existentes, definindo que usaremos a base “local”, confirmando que estamos na base correta e mostrando as coleções que neste caso ainda não existem.
> show dbs admin local >use local switched to db local > db local >show collections false
Agora vamos criar uma coleção de documentos chamada “minha_colecao” e inserir alguns dados.
>db.minha_colecao.insert({ nome: "Mauricio", fone: "12345678", idade: 10 })
ObjectId("4b808e9a6eff")
Quando exibimos as coleções novamente temos “minha_colecao” e “system.indexes” sendo a última criada automaticamente.
>show collections
minha_colecao
system.indexes
Podemos verificar nossos documentos criados e inserir outros.
>db.minha_colecao.find() { "_id" : ObjectId("4b808e9a6eff"), "nome" : "Mauricio", "fone" : "5678", "idade" : 10 } >db.minha_colecao.insert({ nome: "Monet", fone: "000", idade: 100 }) ObjectId("4b912e9a6ef4") >db.minha_colecao.find() { "_id" : ObjectId("4b808e9a6eff"), "nome" : "Mauricio", "fone" : "5678", "idade" : 10 } { "_id" : ObjectId("4b912e9a6ef4"), "nome" : "Monet", "fone" : "000", "idade" : 100 }
Para atualizar os documentos podemos após o hash passar o parâmetro “true” que força uma inserção caso o critério utilizado não seja encontrado.
>db.minha_colecao.update({nome: "Mauricio"}, {nome: "Amorim", fone: "000"}, true) >db.minha_colecao.find() { "_id" : ObjectId("4b808e9a6eff"), "nome" : "Amorim", "fone" : "000", "idade" : 10 } { "_id" : ObjectId("4b912e9a6ef4"), "nome" : "Monet", "fone" : "000", "idade" : 100 } >db.minha_colecao.update({nome:"Inexistente"},{nome:"Insere novo", fone:"2355"}, true) >db.minha_colecao.find() { "_id" : ObjectId("4b808e9a6eff"), "nome" : "Amorim", "fone" : "000", "idade" : 10 } { "_id" : ObjectId("4b912e9a6ef4"), "nome" : "Monet", "fone" : "000", "idade" : 100 } { "_id" : ObjectId("4b987e9a6e10"), "nome" : "Insere novo", "fone" : "2355"}
Por último vamos remover todos os documentos seguindo um determinado critério, neste caso o “fone” igual a “000″. Cuidado! Se o parâmetro com um critério não for informado todos os documentos da coleção serão removidos.
>db.minha_colecao.remove({fone: "000"}) >db.minha_colecao.find() { "_id" : ObjectId("4b987e9a6eff"), "nome" : "Insere um novo", "fone" : "2355"}
As funções utilizadas acima também podem receber um objeto como parâmetro e seu funcionamento será idêntico.
> xyz = { nome: "Monet", fone: "111", profissao: "artista" } >db.minha_colecao.insert(xyz) ObjectId("18b12e9a6ef4") >db.minha_colecao.find() {"_id": ObjectId("18b12e9a6ef4"), "nome":"Monet", "fone" : "111", "profissao" : "artista" }
Estes são comandos básicos de manipulação de dados, mais informações podem ser encontradas nas referências abaixo. Recomendo os screencasts do Joon You que são bem práticos.
Referências:
MongoDB DBA Operations
MongoDB Advanced Queries
Screencast – Introduction MongoDB with Joon You
The interactive shell by Kyle




