Archive for the ‘Dicas’ Category

ter
out 19th

Resolvendo problema com Bundler – snapshot (Ge ...

Esses dias me deparei com um problema ao utilizar o Bundler com Rails 3, erroneamente eu rodei comando:

 bundle install --deployment 

Com isso obtive o seguinte erro:

You have modified your Gemfile in development but did not check
the resulting snapshot (Gemfile.lock) into version control

Isto é um bug que foi reportado esses dias no projeto do Bundler que pode ser resolvido com este fix:

rm -rf .bundle && bundle install

seg
ago 9th

Git – Removendo tags do repositório ...

Uma forma de criar uma marcação no Git seja para documentar uma modificação importante ou para marcar uma versão é usar o comando “tag”. Caso você se depare com o problema de remover uma tag criada acidentalmente no repositório fica aqui a dica de como corrigir.

Imaginando que após alguns commits queremos criar uma tag fariamos isto:

git tag -a beta0.1 -m “Primeira versão beta”

Continuamos trabalhando e após mais alguns commits fazemos novamente:

git add . & git commit -am “Incluindo arquivo README”
git tag -a beta1.0 -m “Mais uma versão beta” 
git push origin master
git push --tags
Counting objects: 6, done.
...
To git@github.com:mauriciodeamorim/testes_com_tags.git
 * [new tag]     	beta0.1 -> beta0.1
 * [new tag]     	beta1.0 -> beta1.0

Aqui cometemos o erro de criar outra tag numa sequência diferente da inicial e enviamos ao repositório.

Olhando nossa árvore no Gitk temos:


Em nosso repositório no GitHub ficou assim:


Então vamos considerar que a tag válida é a primeira “beta0.1” , então apagaremos a tag beta1.0 do repositório e depois localmente.

git push origin :beta1.0
git tag -d beta1.0

Agora olhando tanto para o GitK quanto para o repositório temos tudo em ordem novamente.

Outros comandos

Envia uma tag de cada vez ao repositório git push origin beta0.1
Envia todas as tags ao repositório git push – - tags
Envia commits e tags de uma só vez ao repositório git push origin master – - tags
Lista as tags existentes git tag
Descreve a tag e quantos commits temos após ela git describe
Mostra a tag e commit detalhadamente git show beta0.1
Mostra a tag detalhadamente git tag -v beta0.1

Referências:
Git Ready
Github – Working with remotes

dom
fev 21st

Manipulando dados pelo shell do MongoDB ...

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