首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Symfony、Doctrine、Configuration和Symfony Cache

Symfony、Doctrine、Configuration和Symfony Cache
EN

Stack Overflow用户
提问于 2018-02-05 04:30:57
回答 1查看 434关注 0票数 1

我有一个Symfony应用程序,它为许多数据库共享相同的代码库。

这很典型,我的应用程序的每个“实例”(或“帐户”)都有一个单独的数据库,这是一个简单的医疗预约工具。我需要保持这个架构不变。

然而,我们正在从Symfony 2.8迁移到Symfony 4。在Symfony 4之前,我必须为每个DB创建一个“伪生产”Symfony环境,因为Symfony (使用Doctrine)与配置指定的单个DB紧密相关,即使使用像SYMFONY__DATABASE__NAME这样的环境变量,数据库连接属性也会硬编码到缓存中,所以我需要为每个应用实例创建不同的环境,因此为每个帐户创建一个缓存目录,这是很不理想的。

Symfony 4中新的env vars特性会让动态数据库连接以“原生”的方式变得更加可行吗?

我应该使用另一种方法来实现这一点吗?(例如,创建自定义连接工厂等)

我希望我的prod环境有一个单独的缓存,并让连接参数是动态的。

任何想法都很感谢。谢谢!

注意:

这不是:Using Relationships with Multiple Entity Managers的副本

我已经使用了多个实体管理器,这与此无关。

EN

回答 1

Stack Overflow用户

发布于 2018-02-05 15:22:15

使用Symfony 4为不同的主机设置应用程序应该很简单。您可以只向每个主机提供DATABASE_URL as环境变量,例如使用nginx:

代码语言:javascript
复制
server {
    server_name domain.tld www.domain.tld;
    root /var/www/project/public;
    location / {
        try_files $uri /index.php$is_args$args;
    }
    location ~ ^/index\.php(/|$) {
        fastcgi_pass unix:/var/run/php7.1-fpm.sock;
        fastcgi_split_path_info ^(.+\.php)(/.*)$;
        include fastcgi_params;

        fastcgi_param DATABASE_URL "mysql://db_user:db_pass@host:3306/db_name";

        fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
        fastcgi_param DOCUMENT_ROOT $realpath_root;

        internal;
    }
    location ~ \.php$ {
        return 404;
    }
    error_log /var/log/nginx/project_error.log;
    access_log /var/log/nginx/project_access.log;
}

导入位为fastcgi_param DATABASE_URL ...

默认情况下,所有实例都将使用相同的缓存目录,这可能不是您想要的。假设客户A看到了客户B的数据,因为它是从缓存中提取出来的,而B首先访问它。

解决这个问题的一种方法是修改src/Kernel.php,使其包含一些其他环境变量、项目的基名称或标识每个主机的其他信息,并将其附加到getCacheDir中定义的缓存基目录中。默认情况下,它看起来像这样:

代码语言:javascript
复制
public function getCacheDir(): string
{
    return dirname(__DIR__).'/var/cache/'.$this->environment;
}

您还可以使用Symfony的内置缓存组件为每个主机指定不同的app.cache。通过这种方式,您可以重用负责缓存容器、注释、验证等的系统缓存。

您可以在framework.cache下的config/packages/framework.yml中找到缓存配置。请参阅:https://speakerdeck.com/dbrumann/caching-in-symfony-an-overview?slide=37

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48612711

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档