Mik*_*eld 2 deployment caching capistrano nginx
我在部署我的应用程序时遇到了问题。我有一个 PHP 应用程序,我使用 Capistrano 将我的应用程序部署到我的服务器。
Capistrano 使用我的应用程序的最新版本和我当前文件夹的符号链接创建了一个新的发布文件夹。效果很好,它确实链接了最新版本。
但是当我访问我网站的 URL 时,没有任何变化,即使符号链接链接到当前文件夹(最新版本),文件也来自旧版本文件夹。
Nginx 会缓存我的所有文件吗?或者它是否缓存了我的符号链接,我不知道。
文件夹结构:
current (symlink new release)
releases
new release
old release
Run Code Online (Sandbox Code Playgroud)
虚拟主机:
server {
listen 443;
server_name servname.com;
root /apps/application/production/current/public;
}
Run Code Online (Sandbox Code Playgroud)
问题出在实际路径缓存级别。它使用符号链接路径缓存 PHP 文件。您需要做的是提供真实的文档路径。
您需要在配置文件中添加这两行
fastcgi_param DOCUMENT_ROOT $realpath_root;
fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
Run Code Online (Sandbox Code Playgroud)
重要的部分是$realpath_root。
从文档:
$realpath_root
an absolute pathname corresponding to the root or alias directive’s value for the current request, with all symbolic links resolved to real paths
Run Code Online (Sandbox Code Playgroud)
意义$realpath_root解决了指向其真实路径的所有符号链接。这是重要的部分。
所以你location ~ \.php$会变成
location ~ \.php$ {
try_files $uri =404;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass unix:/var/run/php5-fpm.sock;
fastcgi_index index.php;
include fastcgi_params;
fastcgi_param DOCUMENT_ROOT $realpath_root;
fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
}
Run Code Online (Sandbox Code Playgroud)
确保include fastcgi_paramsif present 不会覆盖您刚刚添加的 2 个指令。
| 归档时间: |
|
| 查看次数: |
955 次 |
| 最近记录: |