[VAZA] 0 Denunciar post Postado Outubro 19, 2011 E ai pessoal... Eu ainda não entendi como o Zend trabalha com ambientes (Desenvolvimento, testes, homologação e produção) Eu verifiquei que no arquivo de configuração .ini tem os seguintes estágios acima, porém como eu decido quando trabalhar com um e com outro? Primeira questão: Se eu estou trabalhando no ambiente de desenvolvimento, eu apenas tenho que setar o arquivo public/index.php para: // Define application environment defined('APPLICATION_ENV') || define('APPLICATION_ENV', (getenv('APPLICATION_ENV') ? getenv('APPLICATION_ENV') : 'development : production')); ???? Segunda questão: E no lado servidor? eu tenho que criar um diretorio virtual para cada ambiente? algo como http://myapplication.development, http://myapplucation.test, http://myapplication.production? Compartilhar este post Link para o post Compartilhar em outros sites
gremio10 14 Denunciar post Postado Outubro 19, 2011 No lado do servidor, vai ser sempre de produção, o de desenvolvimento, tu pode colocar os dados do teu localhost... Compartilhar este post Link para o post Compartilhar em outros sites
[VAZA] 0 Denunciar post Postado Outubro 19, 2011 E com relação a estrutura para esses ambientes? Fica tudo em um mesmo diretorio, dai quando eu quiser passar para a produção eu só altero o index.php e envio os novos arquivos ao servidor? ou posso criar um diretorio para cada ambiente onde eu posso verificar a aplicação rodando em todos os ambientes para que eu possa fazer uma comparação entre elas? Compartilhar este post Link para o post Compartilhar em outros sites
gremio10 14 Denunciar post Postado Outubro 19, 2011 A unica coisa que muda é no index.php aonde no local que tu preferir, tu coloca ou development ou production... tipo, se está no ar, a conexão com o banco tu coloca em production, mas se está localmente, coloque os dados no development Compartilhar este post Link para o post Compartilhar em outros sites
Leozitho 81 Denunciar post Postado Outubro 19, 2011 Localmente (no seu PC) você sempre deve usar ambiente de desenvolvimento, para que os erros sejam exibidos corretamente e você possa corrigí-los. No servidor você sempre vai trabalhar com ambiente de produção, pois é lá que os usuários terão acesso a sua aplicação. Você não precisa setar essa constante aí no arquivo index.php, pois se você fizer isso você terá que editá-lo cada vez que mandar pro servidor ou então criar uma condição pra verificar se está localmente ou no servidor. No exemplo de virtual host do ZF você pode notar que essa constante já é definida lá para ambiente de desenvolvimento: <VirtualHost *:80> ServerName quickstart.local DocumentRoot /path/to/quickstart/public SetEnv APPLICATION_ENV "development" <Directory /path/to/quickstart/public> DirectoryIndex index.php AllowOverride All Order allow,deny Allow from all </Directory> </VirtualHost> Veja que ele possui isso 'SetEnv APPLICATION_ENV "development"'. Portanto, esqueça essa de definir dentro do arquivo index.php. Já no servidor você não precisa definir nada, assim automaticamente o ZF vai seguir o padrão que é produção. Compartilhar este post Link para o post Compartilhar em outros sites
Matias Rezende 50 Denunciar post Postado Outubro 19, 2011 No servidor você sempre vai trabalhar com ambiente de produção, pois é lá que os usuários terão acesso a sua aplicação. Uhn... nem sempre. Se você olhar no application.ini padrão do ZF tem um ambiente que se chama testing. Eu utilizo este ambiente no servidor de produção enquanto não coloco o site no ar, principalmente para exibir erros e exceções. Outra forma de definir o ambiente é no arquivo .htaccess (quando utilizado). Assim: SetEnv APPLICATION_ENV development RewriteEngine On RewriteCond %{REQUEST_FILENAME} -s [OR] RewriteCond %{REQUEST_FILENAME} -l [OR] RewriteCond %{REQUEST_FILENAME} -d RewriteRule ^.*$ - [NC,L] RewriteRule ^.*$ index.php [NC,L] Carlos Eduardo Compartilhar este post Link para o post Compartilhar em outros sites
Leozitho 81 Denunciar post Postado Outubro 19, 2011 Entendi como você faz Carlos. Não faz muito tempo que eu trabalho com o ZF, mas até agora sempre usei somente ambiente de produção no servidor. Eu imaginava que este ambiente específico de teste servia exclusicamente para realizar testes com o PHPUnit por exemplo. Compartilhar este post Link para o post Compartilhar em outros sites
Matias Rezende 50 Denunciar post Postado Outubro 20, 2011 Então... Eu gostei da ideia que surgiu no post e fiz 2 artigos sobre o assunto. Trabalhando com ambientes no application.ini do Zend Framework e Colocando o site/aplicação em manutenção com o Zend Framework Ali eu mostro uma utilidade para estas seções do application.ini, como colocar o site em modo de manutenção de forma simples, além de mostrar algumas informações sobre o application.ini. Carlos Eduardo Compartilhar este post Link para o post Compartilhar em outros sites
[VAZA] 0 Denunciar post Postado Outubro 20, 2011 Matias, é exatamente isso que eu penso. Eu posso ter o ambiente de teste, homologação e produção no servidor. Já tive problema em uma aplicação que na minha maquina, tudo pegava certo, porém quando subi os arquivos, eu estava tendo problema em minha classe. Como você sugere fazer isso Matias? Como consigo trabalhar com os 3 ambientes em um mesmo servidor? Compartilhar este post Link para o post Compartilhar em outros sites
Ghean 0 Denunciar post Postado Outubro 20, 2011 Você pode por exemplo fazer da seguinte forma em seu servidor: / /public_html ----/development ----/test /apps ----/development ----/production ----/test Dentro de public_html tera os arquivos normalmente que serão acessados via endereço principal da sua aplicação. Dentro de cada pasta referente ao ambiente você coloca o conteudo da pasta public de cada aplicação, ou seja, index.php, diretorios, etc. Depois em cada index.php você altera o caminho do APPLICATION_PATH. Com isso você consegue ter varias aplicações Zend no mesmo servidor. Eles serão acessados da seguinte forma http://www.suaapp.com.br -> acessará a aplicação production http://www.suaapp.com.br/development -> acessará a aplicação development http://www.suaapp.com.br/test-> acessará a aplicação test Espero ter sido claro. Compartilhar este post Link para o post Compartilhar em outros sites
[VAZA] 0 Denunciar post Postado Outubro 20, 2011 Clarissimo Ghean..obrigadão. Era exatamente isso que eu estava pensando em fazer. Compartilhar este post Link para o post Compartilhar em outros sites
Ghean 0 Denunciar post Postado Outubro 20, 2011 ' timestamp='1319149441' post='1767976']Clarissimo Ghean..obrigadão. Era exatamente isso que eu estava pensando em fazer. Que bom, depois nos informa de deu certo. ^_^ Compartilhar este post Link para o post Compartilhar em outros sites
[VAZA] 0 Denunciar post Postado Outubro 21, 2011 Ghean, Acho que não estou sabendo configurar os diretorios/application.ini/index.phpFicaria assim a estrutura de pastas? ESTRUTURA DE DIRETORIOS MINHAAPLICACAO /apps CONFIGURAÇÕES DO SISTEMA ---/configs ---/---/application.ini AMBIENTE DE DESENVOLVIMENTO ---/development ---/---/controllers ---/---/models ---/---/views ---/---/---/scripts AMBIENTE DE TESTES ---/tests ---/---/controllers ---/---/models ---/---/views ---/---/---/scripts AMBIENTE DE PRODUÇÃO ---/production ---/---/controllers ---/---/models ---/---/views ---/---/---/scripts /docs /library /public ---/development ---/tests ---/production INDEX.PHP <?php // Define path to application directory defined('APPLICATION_PATH') || define('APPLICATION_PATH', realpath(dirname(__FILE__) . '/../apps')); // Define application environment defined('APPLICATION_ENV') || define('APPLICATION_ENV', (getenv('APPLICATION_ENV') ? getenv('APPLICATION_ENV') : 'production')); // Ensure library/ is on include_path set_include_path(implode(PATH_SEPARATOR, array( realpath(APPLICATION_PATH . '/../library'), get_include_path(), ))); /** Zend_Application */ require_once 'Zend/Application.php'; // Create application, bootstrap, and run $application = new Zend_Application( APPLICATION_ENV, APPLICATION_PATH . '/configs/application.ini' ); $application->bootstrap() ->run(); APPLICATION.INI [production] resources.view[] = phpSettings.display_startup_errors = 0 phpSettings.display_errors = 0 includePaths.library = APPLICATION_PATH "/../library" bootstrap.path = APPLICATION_PATH "/Bootstrap.php" bootstrap.class = "Bootstrap" appnamespace = "Apps" resources.frontController.controllerDirectory = APPLICATION_PATH "/controllers" resources.layout.layoutPath = APPLICATION_PATH "/layouts/scripts" resources.frontController.params.displayExceptions = 0 autoloaderNamespaces[] = "ZendX" [staging : production] [testing : production] phpSettings.display_startup_errors = 1 phpSettings.display_errors = 1 [development : production] phpSettings.display_startup_errors = 1 phpSettings.display_errors = 1 resources.frontController.params.displayExceptions = 1 Compartilhar este post Link para o post Compartilhar em outros sites
Matias Rezende 50 Denunciar post Postado Outubro 21, 2011 Uma pergunta... você vai trabalhar com módulos nesta aplicação? Carlos Eduardo Compartilhar este post Link para o post Compartilhar em outros sites
[VAZA] 0 Denunciar post Postado Outubro 21, 2011 Matias, vou sim. O sistema terá varios modulos e eu também gostaria de separar por diretorios Eu até consegui modificar o ambiente, separando da seguinte forma: app --/configs --/--/application.ini --/development --/--/controllers --/--/models --/--/views --/--/Bootstrap.php --/production --/--/controllers --/--/models --/--/views --/--/Bootstrap.php --/public e no meu application.ini: [production] phpSettings.display_startup_errors = 1 phpSettings.display_errors = 1 includePaths.library = APPLICATION_PATH "/../library" bootstrap.path = APPLICATION_PATH "/production/Bootstrap.php" bootstrap.class = "Bootstrap" appnamespace = "Application" resources.frontController.controllerDirectory = APPLICATION_PATH "/production/controllers" resources.frontController.params.displayExceptions = 1 [development : production] resources.frontController.controllerDirectory = APPLICATION_PATH "/development/controllers" phpSettings.display_startup_errors = 1 phpSettings.display_errors = 1 resources.frontController.params.displayExceptions = 1 e no meu index.php do diretorio public, eu altero a linha de: // Define application environment defined('APPLICATION_ENV') || define('APPLICATION_ENV', (getenv('APPLICATION_ENV') ? getenv('APPLICATION_ENV') : 'production')); para: // Define application environment defined('APPLICATION_ENV') || define('APPLICATION_ENV', (getenv('APPLICATION_ENV') ? getenv('APPLICATION_ENV') : 'development')); Só que quando eu quiser mudar o ambiente, terei que mudar o index.php e eu fazendo isso, não só eu mas como todos os usuários terão a visão do ambiente para o qual eu mudar, ou seja, fica sem noção essa troca de ambientes. To pensando em colocar cada ambiente em um subdominio do meu dominio, exemplo: produção: http://www.meusite.com.br desenvolvimento: http://development.meusite.com.br testes: http://testing.meusite.com.br Compartilhar este post Link para o post Compartilhar em outros sites
Ghean 0 Denunciar post Postado Outubro 21, 2011 VAZA, seguinte... Você criaria suas aplicações individualmente. Nesse caso seriam 3 aplicações diferentes. No index.php de cada aplicação você vai alterar o APLICATION_PATH da seguinte forma para o diretorio em apps: Desenvolvimento (public_html/desenvolvimento/index.php) // Define path to application directory defined('APPLICATION_PATH') || define('APPLICATION_PATH', realpath(dirname(__FILE__) . '/../../apps/desenvolvimento')); Teste (public_html/teste/index.php) // Define path to application directory defined('APPLICATION_PATH') || define('APPLICATION_PATH', realpath(dirname(__FILE__) . '/../../apps/teste')); Produção (public_html/index.php) // Define path to application directory defined('APPLICATION_PATH') || define('APPLICATION_PATH', realpath(dirname(__FILE__) . '/../../apps/producao')); Dessa forma você consegue trabalhar de forma quem nenhum ambiente conflite com outro, cada ambiente nesse caso seria uma aplicação. você criar a plicação desenvolvimento, faz o que precisa, copia para teste, faz os teste e depois copia para produção, compreende? Compartilhar este post Link para o post Compartilhar em outros sites
Matias Rezende 50 Denunciar post Postado Outubro 21, 2011 ' timestamp='1319205231' post='1768233']To pensando em colocar cada ambiente em um subdominio do meu dominio, exemplo: produção: http://www.meusite.com.br desenvolvimento: http://development.meusite.com.br testes: http://testing.meusite.com.br Eu estava pensando em fazer exatamente a mesma coisa. Até montei aqui a lógica, só faltou postar. VAZA, seguinte... Você criaria suas aplicações individualmente. Nesse caso seriam 3 aplicações diferentes. Até é uma ideia. Depende muito do que você vai precisar fazer neste caso. Você vai precisar acessar os 3 ambientes ao mesmo tempo? Se sim, acho difícil de funcionar como o Ghean está sugerindo. Acho que a melhor forma é trabalhar com os subdomínios mesmo. -------------------------- Para funcionar com o subdomínio, deixa o código todo normal, sem modificar nada. Aí você pega só o application.ini e modifica o seguinte: // deste resources.frontController.moduleDirectory = APPLICATION_PATH "/modules/" // para este resources.frontController.moduleDirectory = APPLICATION_PATH "/modules/" APPLICATION_ENV A estrutura de diretórios ficará assim: /apps ---/modules ------/development ----------/controllers ----------/models ----------/views ------/testing ----------/controllers ----------/models ----------/views ------/production ----------/controllers ----------/models ----------/views O restante não muda nada. Você tem acesso a criação de Virtual Host neste servidor? Se tiver, você direciona todos para o mesmo caminho e define o APPLICATION_ENV dentro da criação de cada VHost (development e testing), como eu expliquei aqui. Se não tiver acesso, tem como criar os subdomínios direcionando todos para o mesmo endereço? Fiz os testes aqui e funcionou normalmente. Veja se consegue compreender a lógica utilizada. Carlos Eduardo Compartilhar este post Link para o post Compartilhar em outros sites
[VAZA] 0 Denunciar post Postado Outubro 21, 2011 Matias, Fiz desta forma e deu certo, porém eu não estou conseguindo acessar os controllers/actions exemplo, se eu acessar minha pagina principal: http://meusite.localhost , ele entra na minha indexAction, porém se eu passar o controller e a action por parametro: http://meusite.localhost/default/index , ele diz que a página não pode ser encontrada: Not Found The requested URL /default/index was not found on this server. Creio que eu adicionar o diretorio development e production no router do Zend, estou correto? Eu tentei adicionar mas nao consegui Compartilhar este post Link para o post Compartilhar em outros sites
Matias Rezende 50 Denunciar post Postado Outubro 21, 2011 Na verdade provavelmente o problema foi a questão do URL rewrite. Coloque http://meusite.localhost/index.php/default/index e veja se funciona. Se funcionar é porque o rewrite não funcionou direito, seja porque você não habilitou o AllowOverride via .htaccess dentro do vhost ou outro motivo qualquer. Carlos Eduardo Compartilhar este post Link para o post Compartilhar em outros sites
[VAZA] 0 Denunciar post Postado Outubro 21, 2011 Valeu pela dica. Meu .htaccess estava correto, porém eu tinha que configurar meu diretório virtual no apache. Valeu. Não sei o que seria de mim sem vocês...hehehehe Compartilhar este post Link para o post Compartilhar em outros sites