【问题标题】:svn export makes my page blanksvn export 使我的页面空白
【发布时间】:2011-08-27 23:32:11
【问题描述】:

我将 LAMP 与 CodeIgniter 一起用于我的一个项目;版本由 SVN 控制。每次我在 www 目录中执行svn export file:///svnrepo/project/trunk/www . --force 然后重新加载网页时,它都会变为空白。

该网站仅在我执行service httpd restart(使用 CentOS 5)后才会显示。

我希望将来能够使用 Phing 构建脚本执行 svn 导出,并且我不希望每次构建时都必须获得 root 权限并重新启动 apache。

我遇到的问题是常见问题吗?不重启apache如何解决?

编辑: 之前好像有人遇到过这个问题:http://codeigniter.com/forums/viewthread/181642/

【问题讨论】:

  • 我环顾四周。这可能是 APC 缓存问题。
  • 我也可以确认这一点。禁用 APC 缓存解决了该问题。我通过包管理器安装了 APC。也许通过 PECL 安装可以避免这个问题?目前我只是在 svn 导出后重新启动网络服务器。
  • 白页 = 致命错误。找出致命错误并编辑您的帖子。

标签: php apache svn codeigniter centos


【解决方案1】:

另一种解决方案是在 apc.ini 中设置 apc.stat=0 (reference),然后使用 apc_clear_cache() (reference) 强制删除操作码缓存。

这个解决方案的厉害之处在于,当apc.stat 设置为0 时,它会禁用对每个请求的检查以确定文件是否已被修改。这会带来巨大的性能提升。

此外,使用apc_clear_cache() 清除 APC 缓存往往会导致构建更干净。我遇到了不稳定的竞争条件,其中某些文件将被构建出来,这些文件依赖于尚未构建的其他文件。这会导致大量致命错误。这里唯一需要注意的是apc_clear_cache() 需要通过apache 运行,因此您需要为此实现wget 或类似的东西。

【讨论】:

  • 如果我关闭了apc.stat,这是否意味着代码中的紧急更改会导致APC无法识别更改?因此,每次我对代码进行小的更改(而不重做整个构建)时,我都必须清除缓存?
  • 没错。这种方法的缺点是你需要执行一个完整的构建(svn 导出 + 缓存清除),对于每一个 php 更改,无论多么微小。它非常适合不经常构建(一天几次)的网站。如果您每隔几分钟就对生产站点进行更改,那么这不是一个好方法。但这真的取决于您的工作流程。
【解决方案2】:

好的,我知道了。SVN 维护了一个文件的最后修改时间,它会抛出 APC 缓存。因此,为了解决这个问题,我们在运行 SVN 导出后更新所有文件的最后修改时间。这是我的最终脚本:

#!/bin/sh
svn export --force file:///home/steve/repo/exmaple/trunk \
 /home/steve/public_html/example.com/public/
find /home/steve/public_html/exmaple.com/public | xargs touch

您可以找到更多详细信息here

【讨论】:

  • 我似乎得到了“touch: invalid option -- 'T'”,因为最后一次发现 管道传输到“xargs touch”...
猜你喜欢
  • 1970-01-01
  • 2013-11-30
  • 1970-01-01
  • 1970-01-01
  • 2022-07-18
  • 1970-01-01
  • 1970-01-01
  • 2021-02-07
  • 2015-01-27
相关资源
最近更新 更多