3

使用 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(非专业版)的文章http://wp.tutsplus.com/tutorials/hosting/wordpress-development-and-deployment-with-mamp-git-and-dropbox/但那需要你仍然手动将每个条目添加到您的主机文件中,这违背了目的,因为我可以很容易地手动添加它 MAMP Pro。

4

1 回答 1

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.plistplist可以使用PlistBuddy/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
    }

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

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

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

virtualHosts = Array { Dict { ...Virtual Host 1 值... } Dict { ...Virtual Host 2 值... } Dict { ...etc... } }

上面的命令吐出整个plist文件。单独使用手册页很难找出如何专注于virtualHosts数组或说出数组中的第二个Dict(记录)virtualHosts。感谢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代码phpbash脚本是我的偏好),但我认为以下几点会对您有所帮助:

首先,如果您正在做任何测试,请确保您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是 previews 命令输出的行号(因为数组的索引从 0 开始)。

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

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

于 2013-01-15T13:19:20.727 回答