Não funciona no Linux

Tópicos relativos a instalação e configuração do Zend Framework

Moderador: chackal_sjc

Não funciona no Linux

Mensagempor Douglas Héber » Sex Out 30, 2009 12:08 pm

Boa tarde galera,

Tenho uma aplicação em flex/Zend (Utilizo ZendAmf)/php/apache rodando em ambiente de desenvolvimento Windows perfeitamente.
Estou migrando minhas aplicações todas para ambiente linux na empresa, fazendo as devidas alterações.
Porém as aplicações não rodam.
Desenvolvi um código para chamada simples de classe e da esse erro:


<br />
<b>Warning</b>: Zend_Loader::include(Zend/DB.php) [<a href='function.Zend-Loader-include'>function.Zend-Loader-include</a>]: failed to open stream: No such file or directory in <b>/var/www/html/portal_io2/Zend/Loader.php</b> on line <b>83</b><br />
<br />
<b>Warning</b>: Zend_Loader::include() [<a href='function.include'>function.include</a>]: Failed opening 'Zend/DB.php' for inclusion (include_path='.:/usr/share/pear:/local/PEAR/') in <b>/var/www/html/portal_io2/Zend/Loader.php</b> on line <b>83</b><br />
<br />
<b>Fatal error</b>: Class 'Zend_DB' not found in <b>/var/www/html/portal_io2/php/Teste.php</b> on line <b>8</b><br />



Que é o mesmo erro que dá em todas as aplicações

não instalei o zend no linux apenas copiei minha aplicação;

verifiquei as configurações do apache também;

mas não entendo porque não funciona!!

Se puderem me ajudar eu agradeço!

Abraço

Douglas Héber
Douglas Héber
Leitor
 
Mensagens: 2
Data de registro: Sex Out 30, 2009 11:51 am

Re: Não funciona no Linux

Mensagempor vdsantos » Sex Out 30, 2009 1:34 pm

Ola Douglas,

A pasta do Zend_Framework tem que estar junto com a a sua aplicação, você também precisa mapear o path da library do Zend dentro do Apache (ou usando o set_include_path do PHP) e utilizar o arquivo .htaccess para fazer com que a sua aplicação sempre passe pelo bootstrap(index.php)quando o acesso não for pela pasta public (aonde deve estar as imagens, css e etc). De uma olhada nesse link e veja se a estrutura que você montou está parecida com a que você fez:

http://www.vivaolinux.com.br/dica/Insta ... -Framework

Grande parte desses passos você já deve ter feito, atente-se a contrução do .htaccess e o local onde ele deve ser usado.

Valew.
vdsantos
Participante
 
Mensagens: 53
Data de registro: Seg Jun 08, 2009 2:38 pm
Localização: Guarulhos - SP

Re: Não funciona no Linux

Mensagempor Douglas Héber » Sex Out 30, 2009 2:09 pm

Bem,


Me dá uma ajuda que eu não estou conseguindo visualizar,faço totalmente diferente no windows, minha estrutura é desta forma.

/var/www/html/
../portal (Pasta raiz da aplicação onde fica o index.html que roda o .swf da minha aplicação)
..../Zend
..../php (Pasta onde ficam as classes php da minha aplicação)

Dentro do diretorio portal fica um arquivo server.php que aponta para o diretório php onde ficam minhas classes, o código é o seguinte:

<?php //Adiciona o autoloader do Zend Framework
require_once "Zend/Loader/Autoloader.php";
Zend_Loader_Autoloader::getInstance()->setFallbackAutoloader(true);
//Instancia o servidor PHP
$server = new Zend_Amf_Server();
//Armazena a informação sobre a conexao com o banco de dados.
// Esta informação pode estar em qualquer lugar, em um arquivo separado... xml... ini...
Zend_Registry::set('db', array(
'adapter' => 'bla',
'params' => array(
'host' => 'bla',
'dbname' => 'bla',
'username' => 'bla',
'password' => 'bla',
)
));
//Habilita o modo de desenvolvimento, retornando mensagens de erro melhores
// Comente esta linha quando estiver em modo de produção
$server->setProduction(false);
//Adiciona o diretório php para que as classes sejam encontradas
$server->addDirectory(dirname(__FILE__) ."/php/");
//renderiza a saída, devidamente formatada no protocolo AMF
echo $server->handle(); ?>

não entendi muito bem a estrutura apresentada no tutorial;
vou dar uma estudada nisso , porém se tiveres um insight...vou ficar de olho por aqui.
Agradeço a ajuda!!
Douglas Héber
Leitor
 
Mensagens: 2
Data de registro: Sex Out 30, 2009 11:51 am

Re: Não funciona no Linux

Mensagempor vdsantos » Sex Out 30, 2009 3:14 pm

Kra,

Aqui no serviço também optamos por fazer um sistema usando Flex com Zend_framework, a diferença é que não estamos usando a estrutura MVC do Zend, apenas a library do Zend. Montamos nossa estrutura separando o backend do Frontend:

/www
../backend
..../lib(classes do projeto mais a lib do Zend)
....../Zend
..../config (arquivos aux. de configuracao)
..../wwwroot (diretorio que vai conter o bootstrap do Zend Framework (index.php)
.. /frontend
..../src (aqui fica toda a parte de desenvolvimento do Flex, componentes, modulos e etc.)
..../wwwsroot (aqui fica a parte compilada do Flex (index.html e index.swf e os arquivos auxiliares

No nosso caso, a chamada da url principal cai no diretório wwwsroot, e os comandos internos do flex passam pelo diretório wwwroot, que contem o bootstrap do Zend e vai fciar responsável pela instancia das classes em PHP. A estrutura do bootstrap está assim:

Código: Selecionar tudo
<?php
////////////////// Framework de suporte ////////////////////////////////////////
require_once('../config/config.php');

require_once(_SERVER_ROOT.'/lib/class.fag.php');
require_once(_SERVER_ROOT.'/lib/class.syslog.php');
//suporte ao banco de dados
require_once(_SERVER_ROOT.'/lib/class.banco.php');
$banco = new banco(_BANCO_USERNAME, _BANCO_PASSWORD);
//sessão
require_once(_SERVER_ROOT.'/lib/class.sessao.php');
$sessao = new sessao;
////////////////////////////////////////////////////////////////////////////////

require_once('Zend/Amf/Server.php');
require_once('Zend/Amf/Server/Exception.php');

//classes dos RemoteObject do Flex
require_once(_SERVER_ROOT.'/0000/class.AuthService.php');

$server = new Zend_Amf_Server();
$server->addDirectory(_SERVER_ROOT.'/0000/');

$server->setClass('AuthService');
$server->setClassMap('AuthVO', 'Auth');

$server->setProduction(false);

echo $server->handle();
?>


Note que, no nosso caso estamos usando além de classes auxiliares aquela estrutura de VO para poder usar os RO do flex via objetos. Quando isso acontece, o Zend_Amf precisa fazer o mapeamento das classes via setClass e setClassMap para que tudo funcione.

Como você disse que testou uma chamada simples e já deu erro, seria melhor antes de fazer a integração completa, acertar a chamada do Zend_Amf fazendo aquele teste do tutorial da Zend - http://framework.zend.com/manual/en/zen ... erver.html - caso a chamada falhe, a correção ja deve partir daí, acertando, primeiro, o caminho do Zend_Amf para depois tentar mapear uma classe simples (SUA) e fazer a mesma chamada para identificar a resposta.

Aqui tem mais um tutorial da devzone que explica passo a passo a integração do flex com Zend_Amf, veja se esse te ajuda em algo:
http://devzone.zend.com/article/4381

[]'s
vdsantos
Participante
 
Mensagens: 53
Data de registro: Seg Jun 08, 2009 2:38 pm
Localização: Guarulhos - SP

Re: Não funciona no Linux

Mensagempor TulioBraga » Seg Nov 02, 2009 1:23 pm

Observe esta linha do erro:

Fatal error: Class 'Zend_DB' not found in /var/www/html/portal_io2/php/Teste.php on line 8.

No arquivo Teste.php deve ter um Zend_Loader::include(Zend/DB.php), quando na verdade deveria ser um Zend_Loader::include(Zend/Db.php). O fato de o Linux ser Case Sensitive e o Windows não faz com que este erro ocorra apenas em ambientes Linux.

Vê aí se resolve. Qualquer coisa estamos aqui para ajudar.

Até!
Avatar de usuário
TulioBraga
Participante
 
Mensagens: 54
Data de registro: Sex Mar 06, 2009 12:00 am
Localização: Belo Horizonte


Retornar para Instalação

Quem está online

Usuários vendo este fórum: Nenhum usuário registrado online e 1 visitante