使用MAMP Pro的自动虚拟主机?

时间:2012-09-10 20:46:36

标签: mamp

使用MAMP Pro,您可以创建“local.example.com”等条目,并指向本地计算机上该站点的根目录。

是否可以实现自动化?

这是在我的电脑上我设置如下:

用户/ HM /站点/ example.com /应用 用户/ HM /网站/ example2.com /应用 用户/ HM /网站/ example3.com /应用 等...

app文件夹中是每个相应域的实际网站。

虽然我当然可以手动将其中的每一个添加到MAMP Pro并为每个相应的网站添加一个相关网址“example1.com”,“example2.com”,“example3.com”等,我想知道是否有通过编辑MAMP Pro的虚拟主机模板来自动执行此操作的方法。因此,如果我在我的Sites的文件夹中创建一个名为“example4.com”的新文件夹,并在其中放置一个带有WordPress站点的app文件夹,那么只要MAMP Pro正在运行,我就可以在浏览器中访问example4.com并查看那个本地网站。

我在MAMP上找到了一篇关于此问题的文章(不是专业版)http://wp.tutsplus.com/tutorials/hosting/wordpress-development-and-deployment-with-mamp-git-and-dropbox/,但是要求你仍然手动将每个条目添加到你的主机文件中,因为我可以轻松添加MAMP Pro然后手动。

1 个答案:

答案 0 :(得分:3)

我有类似的想法,因为我想将drush(管理drupal站点的命令行工具)与MAMP和MAMP Pro集成,并且可以自动创建虚拟主机测试。

您手动添加到MAMP Pro的信息存储在文件~/Library/Preferences/de.appsolute.mamppro.plist中,然后用于根据模板文件修改/创建/etc/hostshttpd.conf文件。实际上,模板文件存储在~/Library/Application Support/appsolute/MAMP PRO/templates中,生成的文件存储在Library/Application Support/appsolute/MAMP PRO/中(在此文件夹中选中httpd.conf以及hosts)。

无论如何编辑这些文件都没有意义,因为每次你保存手动修改并重新启动时它们都是由MAMP生成的(还没有调查它的细节但是我记得当我尝试手动编辑那些文件时没有希望)。

您需要做的是直接编辑plist文件de.appsolute.mamppro.plist。使用plistPlistBuddy/usr/libexec/PlistBuddy)可以阅读和写入man PlistBuddy个文件。

您可以使用以下命令提取plist文件中的信息:

/usr/libexec/PlistBuddy -c Print ~/Library/Preferences/de.appsolute.mamppro.plist

使用此命令的虚拟主机的典型(单个)记录如下所示:

    Dict {
        MultiViews = false
        documentRoot = /home/test/openpublish-2.3
        Order = 0
        ExecCGI = false
        serverAliases = Array {
        }
        dyndns = Dict {
            displayName = -
        }
        serverName = openpublish-2.3
        FollowSymLinks = true
        AllowOverride = 0
        local = true
        Allow = 0
        Includes = true
        Indexes = false
        SymLinksifOwnerMatch = false
    }

其中documentRootserverName是每个虚拟主机所需的主要值。 如果您希望输出采用xml plist的形式,请添加-x选项:

/usr/libexec/PlistBuddy -x -c Print ~/Library/Preferences/de.appsolute.mamppro.plist

上面的单个记录是具有以下结构的数组中的许多记录之一:

virtualHosts = Array {         Dict {             ...虚拟主机1值...         }         Dict {             ...虚拟主机2值...         }         Dict {             ...等等...         } }

以上命令会吐出整个plist文件。单独使用手册页,找出如何关注virtualHosts数组或者说Dict数组中的第二个virtualHosts(记录)是很长的痛苦。感谢this page on Manipulating Plists我得到了它(在以下命令中我跳过了/usr/libexec/部分): 要访问整个virtualHosts数组,请使用以下命令:

PlistBuddy -c "Print :virtualHosts" ~/Library/Preferences/de.appsolute.mamppro.plist

打印第二条记录:

PlistBuddy -c "Print :virtualHosts:2" ~/Library/Preferences/de.appsolute.mamppro.plist

打印第五个documentRoot记录的virtualHosts

PlistBuddy -c "Print :virtualHosts:5:documentRoot" ~/Library/Preferences/de.appsolute.mamppro.plist

根据man页面PlistBuddy -c Add entry type [value]会为你做的伎俩(即添加/写入所需的记录),这样你的问题就可以通过将上述信息与手册页和链接相结合来解决(如果你想制作一个剧本,这个链接很有用。)

我尚未完成自动脚本(drush中的php代码或bash脚本是我的偏好)但我认为以下几点可以帮助您:

如果您正在进行任何测试,请确保首先备份de.appsolute.mamppro.plist,或者复制此文件并对副本执行所有测试。所以在下面我假设你在终端上,你已经将命令别名并复制了plist文件,如下所示:

$ alias PlistBuddy="/usr/libexec/PlistBuddy"
$ cp ~/Library/Preferences/de.appsolute.mamppro.plist safe_to_play.plist

Dict阵列添加新的virtualHosts

PlistBuddy -c "Add :virtualHosts: dict" safe_to_play.plist

找到新虚拟主机条目的索引然后执行类似(bash脚本假设):

PlistBuddy -c "Print :virtualHosts: dict" safe_to_play.plist  | grep documentRoot | wc -l

并为此新记录添加documentRoot条目:

PlistBuddy -c "Add :virtualHosts:XXX:documentRoot string /home/path" safe_to_play.plist

其中XXX是previews命令输出的行号(因为数组的索引从0开始)。

当然,您必须对所有条目(FollowSymLinksserverName等)重复此操作,以确保您尊重结构和类型(您在单{{1}中有数组,整数和字符串进入)。最后但并非最不重要的是,必须重新启动MAMP Pro(或至少是服务器)才能使Dict中的更改生效。再次备份您的~/Library/Preferences/de.appsolute.mamppro.plist文件!!!

我希望这可以帮助您制作出您想要的脚本。