使用 Symfony 4 为不同的主机设置你的应用程序应该是直截了当的。您可以只为DATABASE_URL
每个主机提供 as 环境变量,例如使用 nginx:
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
。默认情况下,它看起来像这样:
public function getCacheDir(): string
{
return dirname(__DIR__).'/var/cache/'.$this->environment;
}
你也可以使用 Symfony 的内置缓存组件来为app.cache
每个主机指定不同的 s。通过这种方式,您可以重用负责缓存容器、注释、验证等的系统缓存。
你可以在你的config/packages/framework.yml
下找到缓存配置framework.cache
。请参阅:https ://speakerdeck.com/dbrumann/caching-in-symfony-an-overview?slide=37