【问题标题】:Mixed Windows and *nix environment - 'local' suffix issue混合 Windows 和 *nix 环境 - “本地”后缀问题
【发布时间】:2009-11-15 15:16:03
【问题描述】:

愚蠢的问题 - 提前道歉。

我有一个混合的 Windows 和 Linux 开发环境,服务器是 Linux (Ubuntu)。假设服务器名为“myserver”。

我在 Windows 和 *nix(Ubuntu 和 OS X)上进行开发,在 *nix 上将 myserver 称为“myserver.local”,在 Windows 上将其称为“myserver”。

我有共享代码引用(例如 MySQL 连接字符串、HTTP 远程处理引用等),我必须根据我所在的开发环境进行更改,这很疯狂。对于我的生活,我无法弄清楚如何强制 Windows 将“myserver.local”别名为“myserver”并让世界变得更美好。

有什么想法吗?

非常感谢, 内德

【问题讨论】:

    标签: windows linux networking netbios


    【解决方案1】:

    /system32 中的某处是一个名为 hosts 的文件,您可以在其中输入主机名到您的心脏内容,这些名称将被解析器尊重。应该可以解决您的问题。

    【讨论】:

    • 我认为主机只是用于 IP 别名?让我去试试...谢谢哥们!
    • 是的——但是 MySQL URL 开头附近的那个东西就是这样。你认为 MySQL 是如何通信的? ;)
    • 这不是我的意思...我的意思是 - 我在所有机器上都使用动态 ip,所以我所有的各种服务(MySQL、几个 Tomcat 实例、等等)都可以访问如 'http:\\myservername.local:8080' 等)。但是当 Windows 使用该服务(或 MySQL 或其他)时,我需要将我的代码弄乱到“http:\\myservername:8080”。如果我可以创建一个主机条目,上面写着: 127.0.0.1 localhost myservername myservername.local 那么一切都很好,但我认为你做不到。我刚刚尝试过,但没有成功,但我可能做了一些愚蠢的事情,所以我只是在检查......不过感谢您的帮助。
    • OK 格式不是我想要的。在 localhost 之后想象一个 CRLF :-)
    • 这可能是问题所在 - 您的 IP 地址的所有别名都在同一行。随意串起来!
    【解决方案2】:

    Windows 有一个hosts 文件,您可以更改以使myserver.local 解析为127.0.0.1,就像Linux 一样。它只是隐藏在Windows\System32\drivers\etc\HOSTS 中。但是,如果您总是想使用本地服务器作为参考,为什么不直接写localhost

    一般来说,您的目标应该是让您的部署设置与您的应用程序分开,而不是共享它们。当然,这取决于您所谈论的语言/平台,但在我使用 Python 的情况下,我使用脚本来调用应用程序,例如:

    hostname= socket.gethostname()
    
    if hostname=='devbox':
       def dbfactory():
           return MySQLdb.connect(db= 'myapp', user= 'foo', passwd= 'bar')
       myapp= mymodule.Application(dbfactory, debug= True)
    
    elif hostname=='www':
       def dbfactory():
           return MySQLdb.connect(db= 'myapplive', unix_socket= '/usr/local/var/mysql/socket', user= 'baz')
       myapp= mymodule.Application(dbfactory, debug= False)
    
    else:
        raise NotImplementedError('No known deployment config for machine %r' % hostname)
    
    myapp.run()
    

    【讨论】:

    • 感谢您的回复 - 但请参阅上面的 cmets。这不适用于本地主机。我有几台服务器为我运行各种服务。这是消耗代码。是的 - 我的配置是完全独立的,这就是为什么它并非不可能管理的原因(我在进行更新时在 Windows 上检查我的配置文件,然后从我的引用中删除所有 '.local' 字符串,然后不要' t 再次签入)。
    • 是的,我建议同时签入开发和生产配置,并让应用通过嗅探它所在的机器来决定使用哪个。
    • 这是完全相同的开发配置。这只是由于 Windows 和 Linux 在网络中解析服务器名称的方式存在令人讨厌的差异。 Windows 想要 http:\\servername:port 格式,而 *nix 想要 http:\\servername.local:port。所以我正在考虑在 Windows 的“.local”位中使用别名。
    • 我想我应该稍微澄清一下 - 这是我使用的 Zeroconf/mDNS/Avahi 使用 .local - 一般不是 Linux。
    【解决方案3】:

    替代答案:

    我曾经遇到过类似的问题,并且厌倦了一直重新配置我的应用程序。我的解决方案与 bonice 的建议类似:

    我们的想法是让您的应用根据其所在位置进行不同的自我配置。不过,我不建议“嗅探”。我更喜欢更“官方”和“具体”的东西。也就是说,应该在两台机器上的同一位置找到一些数据,但内容不同。我想到了两种可能性:

    • 环境变量。它们在 Java 中已被弃用,但它们在 Linux 和 Windows 下运行良好。如果您可以访问启动脚本,则可以设置任何您喜欢的内容,并从 Java 中查询值。

    • 项目本身之外的属性/配置文件。我使用了一个名为 /local (linux) 和 C:\Local (Windows) 的目录来包含我想要特定于主机的配置的点点滴滴。主目录也适用于这种事情;每个主机都有一个,Java 通常知道如何/在哪里找到它。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-12-29
      • 2019-03-13
      • 1970-01-01
      • 2011-11-25
      • 1970-01-01
      • 2013-11-28
      • 2013-02-05
      相关资源
      最近更新 更多