0

我創建了一個自定義AMI,其中包含我需要的所有庫,其中包括我爲MaxMind GeoIP安裝的C庫,然後我下載了GeoCityLite.dat/home/ec2-user/geoip/。我導出了環境變量CG_GEOIP(作爲/home/ec2-user/geoip/),甚至GEOIP_LIBRARY_PATH(指向我的安裝位置:/usr/lib64/libGeoIP.so)。但Django沒有找到它,我得到「GeoIP路徑必須是有效的文件或目錄」。 (我確定該文件在那裏,通過SSH連接到我的實例,我可以看到它)。我該如何解決我的問題?Django:「GeoIP路徑必須是有效的文件或目錄」Amazon Elastic Beanstalk

ps:在連接到我的實例時使用printenv沒有顯示我在Beanstalk環境設置中定義的任何環境變量......爲什麼? (不管怎麼說,這不是問題,因爲我定義的變量在某種程度上是由我的應用程序解決的......實際上,數據庫連接的配置位於一個環境變量中,並且我知道自從synchdb命令起作用以後就解決了,我可以請參閱我的RDS實例上生成的表)

回答

1

如果您嘗試通過連接到EC2實例來獲取環境變量,則會出現一些問題。

  • Elastic Beanstalk容器作爲virtualenv運行。因此,命令行中的$ python與執行容器代碼的解釋器不完全相同。
  • Elastic Beanstalk環境執行初始化腳本,該腳本填充容器的環境變量。環境變量不是系統環境變量,它們可用於容器中運行的代碼以及容器命令。

至於你的問題的第一部分,我會檢查你在容器中得到什麼值,並從那裏拿走它。

import os 

cg_geoip = os.environ['CG_GEOIP'] 
geoip_library_path = os.environ['GEOIP_LIBRARY_PATH'] 
+0

感謝澄清有關環境變量......但現在,因爲從os.environ讀變量是我在做什麼,我想知道是否可能涉及到路徑的問題。我的意思是,「/ home/ec2-user/geoip /」可從我的應用程序運行的virtualenv訪問?或者我應該在其他地方移動.dat文件? – daveoncode

+0

@daveoncode它應該可用於應用程序。確保你有適當的權限。我親自將相似的文件保存在'/ etc'中。 – kukido

+1

好的,我將.dat文件移動到/ etc下,它完美地工作!非常感謝;) – daveoncode

相關問題