ehough/pagodabox-bundle

一个使配置和部署您的应用程序在Pagoda Box上变得简单的Symfony2扩展包。

此包的官方仓库似乎已消失,因此该包已被冻结。

v2.0.0 2014-03-03 23:25 UTC

This package is not auto-updated.

Last update: 2019-02-27 11:34:32 UTC


README

Build Status Project Status: Unsupported - The project has reached a stable, usable state but the author(s) have ceased all work on it. A new maintainer may be desired. License

此项目不再维护。一个使配置和部署您的应用程序在Pagoda Box上变得简单的Symfony2扩展包。

####功能

  • 注重高性能
  • 使用无需额外设置轻松配置Doctrine连接参数
  • 轻松配置Doctrine以利用Pagoda Box缓存
  • 全composer支持
    • 不要提交您的vendor目录!此扩展包在Pagoda Box构建过程中安装您的依赖项。
    • 可选地利用GitHub OAuth令牌以防止超时
  • 出色的测试覆盖率 - 准备好生产使用

###要求

  • Symfony 2.3+

###安装 将以下内容添加到您的composer.json

"require": {
   "ehough/pagodabox-bundle": "dev-master"
}

然后在app/AppKernel.php中注册该扩展包

public function registerBundles()
{
    return array(

        // ...
        new Ehough\Bundle\PagodaBoxBundle\EhoughPagodaBoxBundle()
    );
}

###功能:易于应用程序部署

此扩展包最有价值的功能可能是将基于composer的Symfony2应用程序正确部署到Pagoda Box。只需添加以下两个after_build步骤

#####Boxfile

web1:

  shared_writable_dirs:
    -<relative path to your Symfony app root>/app/logs    # notice: no app/cache directory!

  after_build:
    - curl -Lso ./gopagoda.sh https://raw.github.com/ehough/EhoughPagodaBoxBundle/master/Resources/bash/gopagoda.sh; sed -i -e 's/\r//' gopagoda.sh;
    - bash ./gopagoda.sh <relative path to your Symfony app root> <optional GitHub OAuth token>

上述两个after_build步骤实际上下载并执行gopagoda.sh,这将代表您执行以下操作

  1. 从getcomposer.org下载composer.phar
  2. 如果您提供了GitHub OAuth令牌,配置composer以使用它。
  3. 安装您的应用程序的依赖项(composer install
  4. 创建一个优化的类加载器以实现最大化的类加载性能(composer dump-autoload --optimize
  5. 构建任何assetic资产(app/console" "assetic:dump" --env=prod
  6. 清除任何剩余的Symfony缓存(app/console" "cache:clear" --env=prod
  7. 预热Symfony缓存(app/console" "cache:warmup" --env=prod
  8. 触发一个初始HTTP请求到Symfony以完成缓存的预热(php web/app.php

这将完全准备好您的Symfony2应用程序在生产之前部署到其最终的Web服务器。请注意,我们使用app/cache目录进行共享的可写存储。真棒!

###功能:Redis会话存储Pagoda Box 强烈建议您使用Redis缓存进行会话存储。此扩展包使此任务尽可能简单。

#####Boxfile

web1:

  php_extensions:
    -redis

  php_session_save_handler: redis
  php_session_save_path: "tcp://tunnel.pagodabox.com:6379"

#####app/config_prod.yml

ehough_pagoda_box:

  store_sessions_in_redis: true

就是这样!您的Symony会话现在将神奇地安全存储在Redis中。

###功能:更好的注释缓存默认情况下,Symfony将使用基于文件的缓存作为其注释缓存的缓存。使用此扩展包,我们可以轻松地使用Pagoda Box缓存。

#####Boxfile

web1:

  php_extensions: # at least one of these
    -memcache
    -memcached

#####app/config_prod.yml

ehough_pagoda_box:

  annotations_cache:
    type: memcached         # memcache or memcached
    pagoda_env_id: CACHE2   # the Pagoda Box cache ID you'd like to use for the annotations cache

根据pagoda_env_id参数中指定的缓存的实际类型,type参数可以具有memcachememcachedredis的值。

###功能:更易于配置Doctrine连接Pagoda Box 提供有关如何配置您的Symfony数据库的说明。但是,此扩展包使该过程更加简单。

#####app/config_prod.yml

ehough_pagoda_box:
  doctrine:
    dbal:
      connections:
        default:
          pagoda_env_id : DB1
          platform_class: Doctrine\DBAL\Platforms\MySqlPlatform

正如您在上面的 app/config_prod.yml 中所见,您定义了一个 Doctrine DBAL 连接标识符到对应的 Pagoda Box 数据库的映射。在上面的示例中,我们将 default DBAL 连接映射到 DB1。也就是说,default 连接将接收环境变量 DB1_HOSTDB1_PORT 等。

对于每个连接,还需要指定一个 platform_class。这应该是表示底层 DB 连接的类名,并且应该是一个继承自 \Doctrine\DBAL\Platforms\AbstractPlatform 的类。这一步是必要的,以便 \Symfony\Bridge\Doctrine\CacheWarmer\ProxyCacheWarmer 能够执行其任务,而无需接触数据库(我们目前还没有访问权限)。由于 Pagoda Box 目前仅支持 MySQL,您将始终将 platform_class 设置为 Doctrine\DBAL\Platforms\MySqlPlatform

在大多数情况下,您只需要配置 default DBAL 连接,但您可以定义任意多的连接映射。例如:

ehough_pagoda_box:
  doctrine:
    dbal:
      connections:
        default:
          pagoda_env_id : DB1
          platform_class: Doctrine\DBAL\Platforms\MySqlPlatform
        other:
          pagoda_env_id: DB2
          platform_class: Doctrine\DBAL\Platforms\MySqlPlatform
        another:
          pagoda_env_id: DB3
          platform_class: Doctrine\DBAL\Platforms\MySqlPlatform

###功能:更简单的 Doctrine 缓存配置 默认情况下,Symfony 为 Doctrine 的查询、结果和元数据缓存提供了内存缓存。使用此包,我们可以轻松配置 Doctrine 以利用任意数量的 Pagoda Box memcached 实例。

#####Boxfile

web1:

  php_extensions: # at least one of these
    -redis
    -memcache
    -memcached

#####app/config_prod.yml

ehough_pagoda_box:
  doctrine:
	orm:
	  caching:                      # a map of Doctrine ORM entity manager IDs to
	    default:
		  metadata:                 # metadata, query, or result
		    type: memcache          # memcache or memcached
      		pagoda_env_id: CACHE3 	# the Pagoda Box cache ID. This must be a Memcache cache!
          query:
            type: memcache
            pagoda_env_id: CACHE4
          result:
            type: memcache
            pagoda_env_id: CACHE5

在上面的示例中,我们正在配置 default 实体管理器的元数据、查询和结果缓存。每个缓存都接受一个类型(memcachememcached)以及 Pagoda Box memcached 实例标识符。

###配置参考

ehough_pagoda_box:

  store_sessions_in_redis: true     # use Redis for session storage?

  annotations_cache:

    type: redis                     # memcache or memcached
    pagoda_env_id: CACHE2           # the Pagoda Box cache ID

  doctrine:

	dbal:
	  connections:                  # a map of Doctrine DBAL connection IDs to Pagoda Box database IDs
	    default: DB1                # maps the "default" Doctrine DBAL connection to DB1_HOST, DB1_PORT, etc
	    other: DB2                  # maps the "other" Doctrine DBAL connection to DB2_HOST, DB2_PORT, etc

	orm:
	  caching:                      # a map of Doctrine ORM entity manager IDs to
	    default:
		  metadata:                 # metadata, query, or result
		    type: memcache          # memcache or memcached
      		pagoda_env_id: CACHE3 	# the Pagoda Box cache ID. This must be a Memcache cache!
          query:
            type: memcache
            pagoda_env_id: CACHE4
          result:
            type: memcache
            pagoda_env_id: CACHE5
        my_em:
          metadata:
            ...