【问题标题】:post-commit hook produces error on svn commit but works when run on manually on command linepost-commit 钩子在 svn 提交时产生错误,但在命令行上手动运行时有效
【发布时间】:2013-08-13 16:53:39
【问题描述】:

我目前正在尝试为我的 subversion 存储库设置提交后挂钩以发送电子邮件通知。 我正在使用颠覆 1.7.8。我的提交后挂钩脚本如下:

#!/bin/sh

REPOS="$1"
REV="$2"

"$REPOS"/hooks/mailer.py commit $REPOS $REV "$REPOS"/mailer.conf

当我提交时,会产生以下错误消息:

Traceback (most recent call last):
  File "/lib/python2.7/site.py", line 563, in <module>
    main()
  File "/lib/python2.7/site.py", line 545, in main
   known_paths = addusersitepackages(known_paths)
  File "/lib/python2.7/site.py", line 278, in addusersitepackages
   user_site = getusersitepackages()
  File "/lib/python2.7/site.py", line 253, in getusersitepackages
   user_base = getuserbase() # this will also set USER_BASE
  File "/lib/python2.7/site.py", line 243, in getuserbase
   USER_BASE = get_config_var('userbase')
  File "/lib/python2.7/sysconfig.py", line 521, in get_config_var
   return get_config_vars().get(name)
  File "/lib/python2.7/sysconfig.py", line 420, in get_config_vars
   _init_posix(_CONFIG_VARS)
  File "/lib/python2.7/sysconfig.py", line 299, in _init_posix
raise IOError(msg)
IOError: invalid Python installation: unable to open //include/python2.7/pyconfig-32.h (No such file or directory)

这个错误的特殊之处在于,当我在命令行(使用适当的参数)运行 post-commit 时,不会产生任何错误,并且我会收到所需的电子邮件通知。这让我觉得这个错误与我的 mailer.conf 文件无关。

有谁知道是什么导致了这个错误?

谢谢, 杰米。

更正:

我认为在 root 下运行 svnserve 可以在本地解决问题,但经过进一步的实验,我意识到这是错误的。如果项目使用 file:// 语法签出,则 post-commit 在本地计算机上工作,但如果使用 svn:// 语法签出则失败。

因此,只有当 svnserve 尝试运行 post-commit 时才会出现问题,无论它是否在 root 下运行,或者客户端是在同一台机器上还是在不同的机器上。

【问题讨论】:

  • 当它工作时,你是否在服务器的命令行上运行 post-commit 挂钩?另外,请检查 SVN 服务器是否以可以访问 Python 包含路径的帐户运行。
  • 在 root 下运行 svnserve 似乎可以解决问题。谢谢!
  • 太棒了!我已将以上内容添加为答案,请接受。 :)

标签: python svn post-commit


【解决方案1】:

你的钩子没有触发的原因可能有很多:

  • 出于安全原因,Subversion 挂钩脚本在没有设置任何环境变量的情况下运行。因此,在钩子中设置环境变量,并使用绝对路径来运行应用程序
  • 网络驱动器映射是用户特定的。确保运行 SVN 服务器的用户帐户存在驱动器
  • 挂钩不会从 hooks/ 文件夹执行,而是从根服务器的文件夹执行

更多信息:

希望这会有所帮助。

【讨论】:

  • 以 root 身份运行 svnserve 似乎可以修复服务器计算机上提交的错误,但我刚刚发现它仍然发生在其他计算机上的客户端上:S 是运行 post-commit 钩子的 svnserve ?如果是这样,为什么哪个客户端进行提交很重要?
  • 那么,svnserve 以 root 身份运行并充当实际服务器?如果是这样,那就很奇怪了,因为它应该是运行 post-commit 钩子的那个,没有任何问题。
  • 其实我上面评论中对问题的描述是错误的。请参阅原始问题中的更正。
  • "$REPOS"/hooks/mailer.py commit $REPOS $REV "$REPOS"/mailer.conf 替换为\usr\bin\python2.7 "$REPOS"/hooks/mailer.py commit $REPOS $REV "$REPOS"/mailer.conf,即使用Python 的完整路径似乎可以解决问题。非常感谢!
  • 不错!乐意效劳。 :)
猜你喜欢
  • 2011-02-03
  • 1970-01-01
  • 2013-12-01
  • 2013-01-06
  • 2019-04-10
  • 1970-01-01
  • 2017-04-28
  • 1970-01-01
  • 2018-03-25
相关资源
最近更新 更多