gpt4 book ai didi

php - 使用 Capifony 部署我的 Symfony2 应用程序已经开始破坏实时版本的缓存

转载 作者:搜寻专家 更新时间:2023-10-31 21:38:21 24 4
gpt4 key购买 nike

这可能是一个小众问题,但我希望有人能提供帮助。直到昨天,当我试图将一些更改推送到生产环境时,它一直运行良好,但从那以后,最后 3 次部署都暂时中断了实时站点。这是日志中的异常之一:

[2012-12-18 12:12:16] request.CRITICAL: Exception thrown when handling an exception (InvalidArgumentException: The directory "/path/to/app/releases/20121217134758/app/cache/prod/jms_diextra/metadata" is not writable.) [] []
[2012-12-18 12:12:18] request.CRITICAL: InvalidArgumentException: The directory "/path/to/app/releases/20121217134758/app/cache/prod/jms_diextra/metadata" is not writable. (uncaught exception) at /path/to/app/releases/20121217134758/vendor/jms/metadata/src/Metadata/Cache/FileCache.php line 17 [] []

我不明白为什么上一个版本(部署前的当前版本)的缓存目录会受到影响!这是它在我的部署中发生的地方:

--> Updating code base with remote_cache strategy
--> Creating cache directory...........................✔
--> Creating symlinks for shared directories...........✔
--> Creating symlinks for shared files.................✔
--> Normalizing asset timestamps.......................✔
Do you want to copy last release vendor dir then do composer install ?: (y/N)
y
--> Copying vendors from previous release..............✔
--> Downloading Composer...............................✔
--> Updating Composer dependencies..................... BREAK HAPPENS HERE OR SOON BEFORE

如您所见,我的缓存目录甚至不在部署之间共享:

# in deploy.rb

set :shared_files, ["app/config/parameters.yml"]
set :shared_children, [app_path + "/logs", web_path + "/uploads", web_path + "/videos", app_path + "/spool"]

谢天谢地,我在第一次之后就做好了准备,并且有一个 ssh 控制台和一个 sudo chmod -R 0777 app/cache/app/logs/ 准备好被解雇,但这是这完全是一个永久的解决方案。

注意:我目前正在将缓存/日志目录的权限作为自定义部署后 Hook 处理:

# in deploy.rb

after "deploy:finalize_update" do
# Ensure htaccess points to app.php and not app_dev.php
run "sed -i 's/app_dev/app/' #{latest_release}/#{web_path}/.htaccess"

# Use a unique APC prefix to guarantee there are no clashes
run "sed -i 's/_VERSION/_#{release_name}/' #{latest_release}/#{web_path}/app.php"

# Set permissions of all 'writable_dirs' using sudo
pretty_print "--> Setting permissions"
dirs = []
writable_dirs.each do |link|
if shared_children && shared_children.include?(link)
absolute_link = shared_path + "/" + link
else
absolute_link = latest_release + "/" + link
end
dirs << absolute_link
end
sudo sprintf("chmod -R 0777 %s", dirs.join(' '))
end

更新

在我最近的部署过程中,我注意到异常是在稍后开始出现的,所以这与依赖关系无关。我怀疑造成这种情况的原因可能是执行调用当前版本控制台的 cron,然后显然会影响缓存。这是有道理的,因为我最近才设置了 cron。

但我不确定如何解决这个问题。看着 Setting up permissions文档中的部分,似乎可能有几个选项。我对 setfacl 一无所知,所以我担心会破坏某些东西。使用 umask 选项会是个好主意吗?

最佳答案

正如我在更新中提到的那样,我最终选择了 umask 选项。尽管我认为这是控制台引起的问题,但我只取消了 app/consoleumask(1000); 行的注释 - 而不是 web/app .phpweb/app_dev.php。自从进行此更改以来,我所做的几次部署都没有出现问题,所以我想它已经成功了。

关于php - 使用 Capifony 部署我的 Symfony2 应用程序已经开始破坏实时版本的缓存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13934155/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com