【问题标题】:Automatic Virtual Hosts with MAMP Pro?使用 MAMP Pro 的自动虚拟主机?
【发布时间】:2012-09-03 18:18:43
【问题描述】:

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

是否可以自动执行此操作?

那是在我的电脑上,我是这样设置的:

用户/hm/Sites/example.com/app 用户/hm/Sites/example2.com/app 用户/hm/Sites/example3.com/app 等等……

app 文件夹内是每个域的实际站点。

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

我看到一篇关于 MAMP(非 Pro)http://wp.tutsplus.com/tutorials/hosting/wordpress-development-and-deployment-with-mamp-git-and-dropbox/ 的文章,但那篇文章要求您仍然手动将每个条目添加到您的主机文件中,这违背了目的,因为我可以轻松地手动添加它 MAMP Pro 然后.

【问题讨论】:

    标签: mamp


    【解决方案1】:

    我有类似的想法,因为我想将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。可以使用PlistBuddy 实现对plist 文件的读写(/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
    

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

    虚拟主机 = 数组 { 字典{ ...虚拟主机 1 值... } 字典{ ...虚拟主机 2 值... } 字典{ ...等等... } }

    上面的命令吐出了整个plist 文件。单独使用手册页很难找出如何关注virtualHosts 数组或说virtualHosts 数组中的第二个Dict(记录)。感谢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
    

    打印第五条virtualHosts记录的documentRoot

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

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

    我还没有完成我的自动化脚本(phpbashscript 中的drush 代码是我的偏好)但我认为以下几点会对您有所帮助:

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

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

    添加一个新的DictvirtualHosts 数组:

    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 是预览命令输出的行号(因为数组的索引从 0 开始)。

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

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

    【讨论】:

    • 您好,感谢您的精彩回答! vhosts 配置似乎在 MAMP 3.x 中移动了,你有没有成功地使用你的脚本?谢谢!
    • 我还没有在 MAMP 3.x 上测试我的脚本。我的脚本正在做的是 a) 备份 de.appsolute.mamppro.plist 和 b) 附加一个新条目。这很好用! (抱歉错过/未回复您的评论!!!)
    • @Symvan 感谢您的详细回答。它真的帮助了我。如果您确实在 MAMP 3.x 上实现了它,或者对如何实现它有任何想法,您介意检查我的问题吗?我列出了我的所有发现:stackoverflow.com/q/33752919/1934402
    • 我检查了这个问题 - 在我看来,您不在正确的 plist 文件中。请检查您的命令 ~/Library/Preferences/de.appsolute.mamppro.plist
    • 您正在查看正确的文件夹,但可能是错误的文件? - 我在那里添加了我的答案。
    猜你喜欢
    • 1970-01-01
    • 2015-11-20
    • 2012-12-28
    • 1970-01-01
    • 1970-01-01
    • 2011-06-27
    • 2015-07-13
    • 2016-02-18
    • 2014-09-13
    相关资源
    最近更新 更多