2009-11-15 44 views
0

愚蠢的問題 - 提前道歉。混合Windows和* nix環境 - '本地'後綴問題

我有一個混合的Windows和Linux開發環境,並且服務器是Linux(Ubuntu)。假設服務器被稱爲'myserver'。

我在Windows和* nix(Ubuntu和OS X)上開發,在* nix上引用myserver作爲'myserver.local',在Windows上引用'myserver'。

我有共享的代碼引用(例如MySQL連接字符串,HTTP遠程引用等),我必須根據我在哪個開發環境進行更改,這是堅果。對於我的生活,我無法解決如何強制Windows將「myserver.local」別名爲「myserver」,並讓世界變得更美好。

任何想法?

非常感謝, 斯內德

回答

1

某處/ SYSTEM32是一個名爲主機,您可以輸入主機名到你的心臟的內容,這些名字將被分解的尊重。應該解決你的問題。

+0

我以爲主機只是ip別名? 讓我去嘗試... 感謝哥們! – 2009-11-15 15:22:31

+0

這是 - 但在MySQL URL的開頭附近就是這樣。你如何看待MySQL溝通? ;) – 2009-11-15 15:30:26

+0

這不是我的意思...我的意思是 - 我在我的所有機器上都使用動態IP,所以我所有的各種服務(MySQL,幾個Tomcat實例,等等)都可以作爲'http:\\ myservername.local:8080'等來訪問。但是,當Windows使用服務(或MySQL或其他)時,我需要將我的代碼弄亂到'http:\\ myservername:8080'。 如果我可以做一個主機條目,說: 127.0.0.1本地主機 myservername myservername.local 然後一切都很好,但我不認爲你可以。我只是嘗試,但它沒有奏效,但我可能做了一些愚蠢的事情,所以我只是檢查... 感謝您的幫助,雖然。 – 2009-11-15 15:34:14

0

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() 
+0

感謝您的回覆 - 但請看上面的評論。 這不適用於本地主機。我有幾個虛擬服務器爲我運行各種服務。這是消耗代碼。 是的 - 我的配置是完全獨立的,這就是爲什麼它不可能管理(我在Windows上檢查我的配置文件,當更新完成並從我的引用中刪除所有'.local'字符串,然後不要再次檢查它們)。 – 2009-11-15 15:40:34

+0

是的,我建議將開發和生產配置都簽入,並讓應用程序通過嗅探器來決定使用哪臺機器。 – bobince 2009-11-15 15:53:47

+0

這是完全相同的開發配置。這只是由於Windows和Linux在網絡中解析服務器名稱的方式之間的不同造成的。 Windows需要的格式爲http:\\ servername:port,* nix需要http:\\ servername.local:port。所以我在考慮在Windows的'.local'位置出現鋸齒。 – 2009-11-15 15:59:03

0

備選答案:

我曾經有過類似的問題,並厭倦了不得不重新配置我的應用程序。我的解決方案與Bonince所建議的類似:

這個想法是讓你的應用程序根據它的位置不同進行自我配置。雖然我不會推薦「嗅探」。我更喜歡更「官方」和「特定」的東西。也就是說,兩臺機器上的同一地點應該有一些數據,但內容不同。想到兩種可能性:

  • 環境變量。它們在Java中被棄用,但在Linux和Windows下它們工作正常。如果您有權訪問啓動腳本,則可以設置您喜歡的任何內容,並從Java中查詢值。

  • 項目本身之外的屬性/配置文件。我使用了一個名爲/ local(linux)和C:\ Local(Windows)的目錄來包含我希望成爲主機特定的配置的各個部分。主目錄也適用於這種事情;每個主機都有一個,Java通常知道如何/在哪裏找到它。