Tutorial para Atualizar Django na Kinghost

Aleluia!

Começo este post com esta palavra porque deu muito trabalho conseguir (está certo que sou iniciante). Vou colocar aqui alguns passos pra você que deseja atualizar a versão no Django na sua hospedagem Kinghost.

No final do tópico deixei algumas referências que usei para construir este tutorial. O que fiz foi pegar a ideia de vários lugares, juntar tudo e fazer funcionar.

No momento, estou usando o Django versão 1.9.4. Vamos lá:

Primeiro crie o diretório .site-packages dentro de /home/usuário/app_wsgi/

cd apps_wsgi/ (se ela não existe, crie com o mkdir)
mkdir .site-packages
easy_install --install-dir=$PYTHONPATH virtualenv

Agora vamos criar um diretório para armazenar seu ambiente virtual. Crie a pasta .virtualenvs/ na raiz da sua hospedagem (/home/usuário/) e depois o ambiente. O ambiente virtual serve para você instalar versões de pacotes diferentes das atuais. Você pode ter vários ambientes virtuais instalados, cada um isolado do outro com suas versões de pacotes e aplicativos.

mkdir .virtualenvs
python apps_wsgi/.site-packages/virtualenv .virtualenvs/NOME_DO_AMBIENTE_VIRTUAL

Ative o ambiente para começar a instalar seus pacotes.

source .virtualenvs/NOME_DO_AMBIENTE_VIRTUAL/bin/activate

Até aqui, todo o conteúdo é original do https://gist.github.com/douglasmiranda/1232693.

Agora o nome do seu ambiente virtual vai aparecer entre parênteses no começo da linha. Isso quer dizer que você está usando seu ambiente virtual.

(SEU_AMBIENTE_VIRTUAL)14:51 ~ $ which pip
~/.virtualenvs/djpy/bin/pip

Agora sabemos que o pip usado é do ambiente virtual. Instale o Django na versão que preferir:

pip install django==1.9.4

Para verificar se foi instalado corretamente (meu ambiente virtual chama-se djpy) e qual a versão está instalada:

(djpy)-bash-4.1$ which django-admim.py
/usr/local/bin/django-admin.py
(djpy)-bash-4.1$ which django-admin
~/.virtualenvs/djpy/bin/django-admin

(djpy)-bash-4.1$ django-admin.py --version
1.8.3
(djpy)-bash-4.1$ django-admin --version
1.9.4

Repare que se eu colocar o .py no final do comando faz total diferença sobre o que você pretende fazer.

Crie seu projeto pelo painel administrativo da KingHost. Ele deve aparecer na pasta /home/usuário/app_wsgi/SEU_PROJETO. Agora você tem a pasta e um arquivo chamado /home/usuário/app_wsgi/SEU_PROJETO.wsgi.

Agora exclua seu projeto vazio e depois crie ele novamente com o mesmo nome na versão correta (cuidado com o .py):

(djpy)-bash-4.1$ rm -R SEU_PROJETO/
(djpy)-bash-4.1$ django-admin startproject SEU_PROJETO

Altere o conteúdo do arquivo SEU_PROJETO.wsgi para (lembrando que só coloquei maiúsculas para facilitar a visualização):

import os, sys

apache_configuration = os.path.realpath(os.path.dirname(__file__))
project = os.path.join(apache_configuration, 'SEU_PROJETO')

sys.path.append(apache_configuration)
sys.path.append(project)
sys.path.insert(0, "/home/usuário/.virtualenvs/SEU_AMBIENTE_VIRTUAL/lib/python2.7/site-packages")

os.environ['PYTHON_EGG_CACHE'] = '/home/usuário/apps_wsgi/.python-eggs'
os.environ['DJANGO_SETTINGS_MODULE'] = 'SEU_PROJETO.settings'

from django.core.wsgi import get_wsgi_application
application = get_wsgi_application()

Use o comando touch para “recarregar” seu projeto no seu servidor:

(djpy)-bash-4.1$ touch SEU_PROJETO.wsgi

A fim de que os arquivos JS e CSS da admin do Django sejam servidos corretamente, você deverá configurar o parâmetro STATIC_ROOT (settings.py):

STATIC_ROOT='/home/usuário/www/static'
STATIC_URL='/static/'

Execute os comandos a seguir para coletar o conteúdo e recarregar a aplicação:

(djpy)-bash-4.1$ python manage.py collectstatic
(djpy)-bash-4.1$ touch familia.wsgi

Agora envie seu projeto usando um cliente FTP para a pasta /apps_wsgi/SEU_PROJETO/

Depois, sempre execute os comandos a seguir para coletar arquivos estáticos necessários e para recarregar a aplicação (dentro do diretório /home/usuário/apps_wsgi):

(djpy)-bash-4.1$ python manage.py collectstatic
(djpy)-bash-4.1$ touch SEU_PROJETO.wsgi

Lembre-se de sempre ativar o ambiente virtual desejado (para executar os comandos citados acima):

$ cd /home/usuário/apps_wsgi/
$ source .virtualenvs/NOME_DO_AMBIENTE_VIRTUAL/bin/activate

Referências: Suporte da Kinghost
https://gist.github.com/douglasmiranda/1232693
https://help.pythonanywhere.com/pages/VirtualEnvForNewerDjango

Imprimir sem janela de confirmação no Mozilla Firefox

Hoje eu estava com dificuldade em resolver este problema. O cliente queria que, ao inserir uma venda, imprimisse um comprovante sem ter que clicar em algum botão e, muito menos, confirmar a impressão naquela janela onde selecionamos a impressora.

  1. abra uma aba no firefox e digite: about:config
  2. clique com o botão direito e vá em Nova preferência > Boolean
  3. cole este código: print.always_print_silent
  4. na tela seguinte selecione True

Feito estes passos, toda vez que você receber uma impressão ela será enviada diretamente para a impressora. Aí surge outro problema: o Mozilla Firefox mantém como padrão a última impressora que você utilizou nele. Para resetar esta opção, ainda na aba about:config:

  1. procure a opção: print.print_printer
  2. clique com o botão direito e vá em Restaurar o padrão

Ainda não acabou! Na próxima impressão o Mozilla vai armazenar novamente a impressora utilizada. Para que ele sempre utilize a impressora que é padrão do seu computador:

  1. procure a opção: print.save_print_settings
  2. dê dois cliques com o botão esquerto do mouse para que altere seu valor para False
  3. a linha selecionada ficará em negrito

Bom, agora você não vai mais ver a janela de confirmação de impressão e o Mozilla Firefox sempre irá utilizar a impressora que está definida como padrão no seu computador. Se você alterar a impressora padrão não será necessário reiniciar o navegador para utiliza-lá.

Acessar um elemento da página principal estando dentro do iframe

Você possui a página principal (principal.html) e dentro possui um iframe (iframe.html).

Para pegar um elemento da página principal de dentro do iframe (iframe.html) usamos o seguinte código em javascript:

// Para pegar o valor de um elemento, ex: div, p, h1, entre outros
parent.document.getElementById('elemento').innerHTML;
// Para definir
parent.document.getElementById('elemento').innerHTML = 'Texto aqui =)';
// Para utilizar em formulário (input) troque o 'innerHTML' por 'value'

 

Como executar arquivos de extensão .vbs (VBScript) no PHP

É possível executar arquivos com extensão .vbs no php.

Veja o código abaixo:

<?php 

/* Defina o caminho para o arquivo(s) */ 
$command = 'wscript.exe C:/Users/zOttEssO/Desktop/teste/testeImp01.vbs'; 
$command2 = 'wscript.exe C:/Users/zOttEssO/Desktop/teste/testeImp02.vbs'; 

// Executa os arquivos/comandos

$obj = new COM ( 'WScript.Shell' ); 

if ( is_object ( $obj ) ) 
{ 
    $obj->Run ( 'cmd /C ' . $command2, 0, FALSE ); 
    // Define um tempo de 3 segundos para executar o outro arquivo/comando
    sleep(3);
    $obj->Run ( 'cmd /C ' . $command, 0, FALSE ); 
} 
else 
{ 
    echo 'Não foi possível criar o objeto!'; 
} 

$obj = null;

Fonte: http://www.sitepoint.com/forums/showthread.php?505709-run-a-vbs-from-php

 

Imprimir vários arquivos em mais de uma impressora com VBScript

Tive uma dificuldade para encontrar/montar esta solução. Com o script a seguir é possível imprimir todos os arquivos de um determinado diretório na impressora que você escolher, sem que apareça a tela de impressão. Desta maneira, também pode-se criar dois arquivos para imprimir em duas impressoras distintas, exemplo: uma compra feita na praça de alimentação onde é impresso o ticket com a senha no atendimento e na cozinha o pedido.

Entenda algumas coisas antes:

  • É possível imprimir apenas na impressora padrão;
  • Você terá que achar uma solução para executar o VBScript (arquivo.vbs) no seu projeto;
  • Para executar o arquivo com o PHP, veja http://www.rafaelzottesso.com.br/?p=205

Como o script funciona:

  • É definida uma nova impressora padrão (a que se deseja imprimir os arquivos);
  • Todos os arquivos do diretório são enviados para esta impressora;
  • Por último define-se a impressora padrão antiga;

Crie um arquivo com a extensão .vbs e cole o seguinte conteúdo:

'  Script para impressão de documentos
'  Modificado por Rafael Zottesso
'  ******************************
' Cria a variável para definir a impressora padrão
Set objPrinter = CreateObject("WScript.Network")
' Para impressora da rede utilize "\servidorNome da Impressora"
objPrinter.SetDefaultPrinter "Nome da Impressora"
' Define o diretório
TargetFolder = "C:UserszOttEssODesktoptestelog"
Set objShell = CreateObject("Shell.Application")
Set objFolder = objShell.Namespace(TargetFolder)
' Lista os arquivos
Set colItems = objFolder.Items
For Each objItem in colItems
' Imprime os arquivos encontrados
objItem.InvokeVerbEx("Print")
Next
' Define-se a impressora padrão após 5 segundos
Wscript.Sleep 5000
Set oldPrinter = CreateObject("WScript.Network")
oldPrinter.SetDefaultPrinter "Nome da Impressora Padrão Antiga"

Não tenho conhecimento em VBScript. Esta solução foi a que consegui para meu problema.