2013-04-23 53 views
0

我試圖設置兩個Rails應用程序。我希望他們都使用一個MySQL數據庫。我的設置是這樣的:在兩個EC2實例上使用MySQL數據庫不能在一個實例上工作

使用Elastic Beanstalk我已經安裝了兩個Rails應用程序,它具有兩個不同的環境。我使用MySQL數據庫設置的應用程序之一。所以現在我有兩個EC2實例 - 一個用於每個Rails應用程序和一個RDS MySQL實例。

我在兩個EC2實例中設置安全組,以便能夠通過port 3306連接到MYSQL。

我設置數據庫安全組授權既EC2實例,也是我的設置CIDR/IP與第二EC2實例的私有IP(在一個沒有MySQL數據庫在配置Beanstallk應用程序集)

在兩個軌道應用我設置的database.yml中,如:

production: 
    adapter: mysql2 
    encoding: utf8 
    database: <%= ENV['RDS_DB_NAME'] %> 
    username: <%= ENV['RDS_USERNAME'] %> 
    password: <%= ENV['RDS_PASSWORD'] %> 
    host: <%= ENV['RDS_HOSTNAME'] %> 
    port: <%= ENV['RDS_PORT'] %> 

我分配ENV值用於生產上的第二個實例(即一個沒有MySQL的DB)與來自第一EC2實例ENV值。

我在這裏錯過了什麼?

我還將我的計算機IP地址添加到數據庫安全組,並且能夠使用憑證作爲ENV變量連接到MySQL數據庫。

回答

0

問題解決了 - 而不是我設置database.yml文件的數據庫憑據的ENV變量。彈性豆莖上的每個推動都會覆蓋環境變量git aws.push

+0

你遵循什麼步驟來解決這個問題?我有同樣的問題。 – 2016-02-18 09:45:58

2

您可能忽略這一點:

socket: /var/lib/mysql/mysql.sock 
+0

Thx,但它沒有幫助。我將它添加到生產部分的database.yml中,它不起作用。數據庫不在本地服務器上 - 它是亞馬遜上的附加實例。使用這一行,我仍然收到錯誤'無法通過套接字連接到本地MySQL服務器'/var/lib/mysql/mysql.sock'(2)(Mysql2 :: Error)' – kabebop 2013-04-23 17:51:20

+0

試試這個:http:/ /stackoverflow.com/questions/5499035/ruby-on-rails-3-cant-connect-to-local-mysql-server-through-socket-tmp-mysql-s – 2013-04-23 19:43:54

+0

我在看這個,但它不是我的情況。 MySQL數據庫位於遠程實例上,因此它不會在任何一個EC2實例上本地安裝。我只能從一個實例連接到它,這就是問題所在。我認爲socket錯誤是因爲當rails找不到遠程數據庫時,它試圖在本地機器上找到它。 – kabebop 2013-04-24 10:46:15

0

就我而言,這是因爲我使用了錯誤的ENV變量名。 你可以仔細檢查你通過連接到您的實例與eb ssh正確設置的一切,然後printenv | grep RDS,這應該給你這樣的:

RDS_HOSTNAME=yourhostname.amazonaws.com 
RDS_DB_NAME=ebdb 
RDS_PASSWORD=yourpassword 
RDS_USERNAME=yourusername 
RDS_PORT=3306 

確保這些都反映在你的config/database.yml文件 - 要麼使用<%= ENV['varname'] %>,要麼對其進行硬編碼。顯然,前者更可取。 :)

相關問題