sexta-feira, 31 de agosto de 2018

[WordPress] Criando cópia de um site wordpress

Frequentemente para trabalhar num site precisamos criar uma cópia dele localmente. Pretendo explicar nessa postagem como criar uma cópia de um site em Wordpress no seu computador para trabalhar como ambiente de desenvolvimento.

Copiar o banco de dados
Esse procedimento vai variar. Muitos servidores de hospedagem oferecem no seus painéis de controle um meio de fazer backup. Procure essa opção e faça download desse arquivo com o backup.

O MySql tem um programa específico onde poderá fazer isso (MySql Workbench).

Pronto, agora é entrar na sua nova pasta e editar os arquivos de configuração. Primeiro, se existir, editar o ".htaccess" trocando os nomes da pasta antiga. Segundo, trocar as informações de banco de dados no arquivo "wp-config.php", nele vai ter os dados de conexão e prefixo das tabelas.
Caso pense em mudar de banco, faça o backup no banco de origem e restaure no banco de destino, aí nem precisa alterar prefixo das tabelas.
A ideia minha é manter os dados de conexão e copiar as tabelas com prefixo diferente no mesmo banco de dados. Já veremos como fazer a cópia de tabelas.


Copiando as tabelas mudando apenas o prefixo.
Como mencionado acima, vou manter a mesma base de dados e vou copiar as tabelas mudando apenas o prefixo. Entre num terminal MySQL para executar os comandos.
Primeiro liste as tabelas do seu Wordpress:

  • show tables;

Por padrão, as tabelas do Wordpress tem o prefixo "wp_". Para cada tabela encontrada, faça uma cópia usando o seguinte comando:

  • create table wp_novo_posts select * from wp_posts;
No exemplo, para a nova tabela, eu usei o prefixo "wp_novo", porém use qualquer outro que quiser.


Modificações para acesso do usuário
Como alteramos os prefixos das tabelas, teremos erro de permissão ao tentar entrar no sistema administrativo do WordPress. Para resolver isso, precisamos substituir os prefixos de alguns registros nas seguintes tabelas:
  • select option_name from meuPrefixo_options where option_name like '%user_roles';
Nessa consulta, deverá aparecer um registro. Atualize-o usando o comando abaixo lembrando de substituir "meuPrefixo" pelo seu prefixo.
  • UPDATE meuPrefixo_options SET option_name = 'meuPrefixo_user_roles' WHERE option_name LIKE '%user_roles';

Trocar o option_name "antigo_user_roles" para "meuPrefixo_user_roles".
  • select umeta_id, meta_key from meuPrefixo_usermeta where meta_key like 'wp_%' ;
Substituindo...
  • UPDATE wpfb_usermeta SET meta_key = replace(meta_key, 'wpfb_eng_', 'wpfb_') where meta_key like 'wp_%' ;

Atualizando o link do Wordpress
Ainda utilizando um terminal para executar comandos no MySQL, vamos atualizar mais dois campos do banco de dados para que nossa cópia funcione.
Verificando...

  • select option_name, option_value from wpfb_options where option_name = 'siteurl' OR option_name = 'home';


Atualizando...

  • UPDATE wp_options SET option_value = 'http://localhost' where option_name = 'siteurl' OR option_name = 'home';



Atualizando os links das imagens

Baixar e instalar o plugin:
  • http://wordpress.org/plugins/velvet-blues-update-urls/
Na área administrativa, clique em Ferramentas -> Update URL
Marque todos os tipos de URL que deseja atualizar e aplique a configuração.


quarta-feira, 24 de junho de 2015

[Ubuntu] Redimensionar imagens pela linha de comando

Tirou um monte de fotos usando o máximo de megapixel da sua câmera e agora tem uma pasta com várias imagens imensas ?
Sem problemas ! Você pode redimensionar uma pasta inteira de imagens para o tamanho e qualidade que desejar.

Para converter as fotos, usaremos o comando "convert". Para instalá-lo, faça:
sudo apt-get install imagemagick

No seu terminal, dê um "cd" até a pasta de fotos que deseja converter.
cd /home/fulano/fotosViagem

Já dentro da pasta das fotos, usaremos o seguinte comando:

cdt=1; for arq in *.JPG; do convert $arq -resize 25% -quality 80% ~/Imagens/$arq;((cdt++)); echo 'Convertendo '$arq;done

Cole o comando inteiro no terminal, mas, antes de usar, é importante entender o que são esses comandos:

  • *.JPG refere-se a extensão das imagens, note que está em maiúsculo. Se suas imagens foram salvas com outra extensão ou em minúsculo, modifique essa parte. (Exemplo: *.jpg ou *.png
  • -resize 25%: Diminui a foto para 25% do tamanho original. Altere essa porcentagem caso deseje uma imagem menor ou maior.
  • -quality: Quanto menor a qualidade que salvamos, menor o espaço ocupado pela imagem no computador. Se quiser qualidade máxima, use 100%. No caso, usamos 80%.
  • ~/Imagens/: Aqui é a pasta de destino das fotos, é onde as fotos redimensionadas serão salvas. Neste caso, vai salvar na pasta Imagens que está dentro da home do seu usuário (/home/MEU_USUARIO/Imagens/). Super recomendo alterar essa pasta para uma outra que desejar.
O comando "convert" tem uma série de opções de edição de imagem por linha de comando. Portanto pode-se modificar o que propus neste post e criar uma edição em lote da maneira que desejar. 

Com o comando "convert" você vai ver que é possível girar, escrever e cortar a sua imagem além de muitas outras coisas. Se quiser conhecer mais as opções do comando "convert", dê uma olhada em

Té + !

terça-feira, 24 de junho de 2014

[OpenCart] Erro no Módulo Correios (prazo diferenciado)

Pessoal, algumas áreas no Brasil estão com problemas de entrega pelos Correios. Isso prejudica o funcionamento do módulo dos correios do OpenCart. O Webservice dos Correios envia a mensagem de que a entrega será diferenciada, mas isso vem no campo de erro. Embora o frete seja calculado, o OpenCart ignora e mostra apenas o erro.

Erro no site: "Atenção: Não há opções de entrega disponíveis. Por favor, contate-nos para assistência!"
Erro ao investigar o webservice dos correios: "Área com entrega temporariamente sujeita a prazo diferenciado".

Esse erro ocorre apenas para alguns CEPs, nem sempre aparece,
E vamos lá aos códigos...

No "catalog/model/shipping/correios.php" altere
if($servico['Erro'] == 0 && $valor_frete_sem_adicionais > 0)
substitua por
if(($servico['Erro'] == 0 || $servico['Erro'] == 10 ) && $valor_frete_sem_adicionais > 0)
(cuidado para não comer a chave "{" do if )

Porém eu acho importante esse erro aparecer para o comprador pois ele deve saber que o produto vai ter problemas na entrega. Então testo se o erro é o 10 e incluo a mensagem no título do tipo da entrega.
Procure os seguintes códigos abaixo no mesmo arquivo e adicione as linhas em laranja:

// texto a ser exibido para Sedex a Cobrar
if($servico['Codigo'] == $this->correios['Sedex a Cobrar']){
 $title = sprintf($this->language->get('text_'.$servico['Codigo']), $servico['PrazoEntrega'], $this->currency->format($cost));
 if($servico['Erro'] == 10) $title .= ' ('.$servico['MsgErro'].')';
 $text = $this->currency->format($this->tax->calculate($cost, $this->config->get('correios_tax_class_id'), $this->config->get('config_tax')));
}
else{
 $title = sprintf($this->language->get('text_'.$servico['Codigo']), $servico['PrazoEntrega']);
 if($servico['Erro'] == 10) $title .= ' ('.$servico['MsgErro'].')';
 $text = $this->currency->format($this->tax->calculate($cost, $this->config->get('correios_tax_class_id'), $this->config->get('config_tax')));
}

Galera, gostaria de contar com a colaboração de vocês para melhorar isso ou até checar se a solução é realmente adequada. Fiz essa alteração a poucos minutos e já estou publicando pois vejo que ela é bem emergencial, mas é sempre bom construir soluções de maneira colaborativa.

Abraços !


domingo, 18 de maio de 2014

[Apache2] Erro de permissão ao acessar site: "Forbidden"

Meu apache2 estava até funcionando direito, mas depois de um tempo e várias atualizações fui tentar usar de novo e notei que havia um erro. Ao acessar o site no navegador:

Forbidden

You don't have permission to access / on this server.

Analisando o log (/var/log/apache2/error.log) tenho o erro:
 client denied by server configuration

Para resolver, editei o arquivo de configuração do apache adicionando as permissões.

  • sudo nano /etc/apache2/apache2.conf

Adicione as permissões para sua pasta com as seguintes linhas
<Directory /minhapasta/meusite/>
        Options Indexes FollowSymLinks
        AllowOverride None
        Require all granted
</Directory>

Atente em trocar nessa configuração "/minhapasta/meusite/" pelo caminho da sua pasta.
Depois reinicie o apache para aplicar as configurações.
  • sudo service apache2 restart

Após essas etapas, seu site deve voltar a funcionar. 
Caso ainda tenha problemas de permissão, cheque no seu sistema operacional se as permissões de acesso à pasta estão ok.

Outra questão de permissão que pode surgir, é que a pasta só esteja autorizada para seu usuário. Neste caso, faça o apache iniciar com o seu usuário. Procure no arquivo "/etc/apache2/apache2.conf" o seguinte:

User <Your User>
Group <Your Group>

Então substitua pelo seu usuário e grupo nestas linhas.

Té + !




sábado, 29 de março de 2014

[Ubuntu 13.10] Tela preta no youtube (sem vídeo)

Navego pela web usando Chromium. No último mês, tem me incomodado cada vez mais problemas ao assistir vídeos no youtube:
  • As vezes, ao entrar num vídeo do youtube, aparece uma tela preta no lugar do flash player.
  • Ao assistir um vídeo e, depois, mudar de aba, quando volta o vídeo some, só se tem o áudio.
Tentei algumas soluções, mas o que funcionou foi trocar o plugin do flash.
Trocaremos o plugin mais comum do Adobe Flash Player para o Pepper Flash Player

Abra um Terminal e digite os seguintes comandos:

sudo add-apt-repository ppa:skunk/pepper-flash
sudo apt-get update
sudo apt-get install pepflashplugin-installer

A primeira linha adiciona o repositório para download do plugin. Depois, atualiza-se. O último comando instala o Pepper Flash Plugin. Faça um de cada vez para ter certeza do está fazendo.

Pronto, temos o plugin instalado, mas precisamos adicioná-lo ao nosso navegador Chromium. Abra o arquivo de configuração do navegador com o seguinte comando:

sudo gedit /etc/chromium-browser/default

No caso, estou utilizando o editor de texto "gedit". Sinta-se a vontade de usar outro editor que preferir. Então adicione, ou altere se já existir, a seguinte linha

CHROMIUM_FLAGS="$CHROMIUM_FLAGS --ppapi-flash-path=/usr/lib/pepflashplugin-installer/libpepflashplayer.so --ppapi-flash-version=$FLASH_VERSION"

Salve o arquivo e reinicie o Chromium.
Vamos checar se instalou? Na barra de endereço digite
chrome://plugins/

Note que no canto direito há uma opção de "Detalhes", deixe isso expandido.
Depois utilize "ctrl+f" para buscar a palavra "Flash".
Desative o antigo "/usr/lib/flashplugin-installer/libflashplayer.so" (NPAPI)
Deixe ativo somente o Pepper (PPAPI) que acabamos de instalar.

Veja na imagem como deve ficar o resultado final:


Pronto gente, acabou ! Isso resolve o problema ! Reinicie o navegador e divirta-se !

Coisas que tentei e que não funcionaram
  • atualizar chromium-codecs-ffmpeg-extra
  • desabilitar a aceleração de hardware no flash player
  • alterar a flag "Composição de thread" do Chromium
Té +!

sexta-feira, 14 de março de 2014

[Linux] Separando arquivos modificados através de script bash (Criando um pacote automaticamente)

[Linux] Copying modified files into a new folder using bash script


- Você programa alterando vários arquivos e não anota qual alterou ?
- Do you modify a lot of source codes and after don’t know which ones were modified ?
- Gostaria de montar um pacote com os arquivos modificados para atualizar o ambiente de produção ?
- Would you like to create a package to update the production environment ?
Seu problemas acabaram !!!
Your problems are over!


Se você é mais um programador rústico que vive com os lobos na montanha e altera códigos dos programas usando “nano” no terminal do Linux, saiba que você não está sozinho nesse mundo !
If you are a rustic programmer that lives in a mountain with wolves and modify system source codes using “nano” at Linux terminal, be aware that you aren’t alone in this world !


Eu fiz um Script Bash que verifica os arquivos alterados a partir de uma data/hora definidos e copia para um novo diretório mantendo toda estrutura de pasta. Com isso, teremos todos os arquivos modificados numa pasta, ou seja, um pacote pronto para atualizar a produção.
I developed a Bash script that uses a specified hour to find modified files in a folder and then copies all of them into a new folder keeping the same folder structure. With all modified files in one folder organized as the original one, we have a package and we can update the production environment.  


Acredito que isso tenha diversos usos, é só adaptar para o que precisa.
I believe this script has several utilities and can modified as much as you need.
Vamos ao código !
Let’s go to the codes !


*Crie uma nova pasta para o pacote e salve o script nela
*Create a new folder to the package and then save that script in this folder.



#!/bin/bash


#Pasta base, um nível acima da pasta principal
#Set base folder which must be above the main folder
dirIni="/media/4965-5CD0/Marcos/Sites e Flash/rollingsports/"
#Subdiretorio a partir do inicial(definido acima). Dessa pasta para baixo sera montado o pacote.
#Set the main folder. The search will start in this folder.
dirMain="site"
#Serao localizados todos os arquivos modificados a partir da data definida (YYYY-MM-DD).
#Set the initial date (YYYY-MM-DD) to find the files
datIni="2012-11-15"
#Extensoes a serem buscadas
#Set the files extensions (in this case .php and .tpl)
extensao="\(php\|tpl\)"


# Gera um arquivo com a data que definimos em datIni. Servirá para comparação logo abaixo.
# A temporary file will be created with the date of “datIni”. It will be used for file comparison.
touch --date $datIni /tmp/start


#Lista todos os arquivos da pasta principal modificados após a data definida.
# The command will list all modified files after the set date.
result="$(find "$dirIni$dirMain" -regex ".*$extensao$" -newer /tmp/start)"


nro=0 # Contador - Counter
nroCopiados=0


(
IFS=$'\n'
set +f


#Para cada arquivo encontrado, processar da seguinte forma:
#For each file, do the commands:
for arquivo in $result
do
#Pega o nome do arquivo e prepara-o para copiá-lo para uma nova pasta
#Get the filename and prepare the file to be copied into a new folder
d="${arquivo/$dirIni/}"
nome="$(basename "$arquivo")"
d="${d/$nome/}"


#Perguntar se quero adicionar o arquivo no pacote
#Here it will show the filename and ask you if you want to copy the file
read -p " Empacotar "$d$nome" ? (S/N) " ans


#Pega a resposta do usuário (S/N) e transforma a letra em maiúscula.
#Get the user’s answer and change the letter typed into uppercase
ans="$(echo $ans | tr '[:lower:]' '[:upper:]')";


#Caso o usuário digitou “S”, coloca o arquivo no pacote
#If the user has typed “S”, it means “YES” then the command will copy the file
if [ "$ans" == "S" ]
then
#Cria a estrutura de pasta dentro do pacote antes de copiar o arquivo
#Now it will create a folder before copying the file in order to keep the same organization
test -d "$d" || mkdir -p "$d" && cp $arquivo "$d"
let nroCopiados+=1 #Incrementa o contador.
echo $d$nome >> $dirMain"/pacote.log"   
fi


let nro+=1 #Incrementa o contador. Increase the counter
done


#Fim, mostra a quantidade de arquivos copiados e gera um log descrevendo o pacote.
#At the end the command will show you the number of copied files and it will save descriptions in a log file.
echo -e "\n\n Foram empacotados "$nroCopiados" arquivos dos "$nro" encontrados."


echo -e "\n\nForam empacotados "$nroCopiados" arquivos dos "$nro" encontrados." >> $dirMain"/pacote.log"
date +'%d/%m/%Y %H:%M' >> $dirMain"/pacote.log"
)




quinta-feira, 2 de janeiro de 2014

[Ubuntu 13.10] Tecla de brilho de tela não funciona

Anoiteceu e resolvi diminuir o brilho da tela do meu notebook e... nada !
Até apareceu a animação de que se está diminuindo o brilho da tela, mas, de fato, a ação não acontece.

Antes e Depois de mexer no brilho (nenhuma alteração é notada)

Para resolver isso, criei um arquivo chamado 20-intel.conf
Seu conteúdo deverá ser o seguinte:

Section "Device"
    Identifier  "card0"
    Driver      "intel"
    Option      "Backlight"  "intel_backlight"
    BusID       "PCI:0:2:0"
EndSection

Salve esse texto no arquivo e mova para a pasta "/usr/share/X11/xorg.conf.d/".
Para isso, utilizei no terminal o comando "mv" combinado com "sudo" pela questão de permissão de acesso a essa pasta.

sudo mv 20-intel.conf /usr/share/X11/xorg.conf.d/20-intel.conf

Após criar e mover o arquivo para a pasta certa, reinicie o computador !
Pronto, só apertar as teclas de brilho que deverá funcionar.

Antes e Depois ( Agora sim está funcionando !!! )

Espero que essa solução funcione para vocês como funcionou para mim.

Té + galera !