2013-02-22 33 views
1

我有一個EC2實例和我的Rails代碼,我試圖設置它與Amazon RDS交談,但是當我嘗試啓動rails服務器時出現錯誤我不知道怎麼糾正:在EC2和RDS上設置Rails

/opt/bitnami/ruby/lib/ruby/gems/1.9.1/gems/mysql2-0.3.11/lib/mysql2/client.rb:44:in `connect': Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2) (Mysql2::Error) 

在我的database.yml文件,我有這樣的:

development: 
    adapter: mysql2 
    encoding: utf8 
    reconnect: false 
    database: development 
    pool: 5 
    username: root 
    password: secret 
    host: localhost 

production: 
    adapter: mysql2 
    encoding: utf8 
    database: mydbname 
    username: myusername 
    password: mypassword 
    host: mypublicdnsformydb 
    port: 3306 

我分配RDS實例相同的安全組作爲我的EC2其中有:

22 (SSH) 0.0.0.0/0 
80 (HTTP) 0.0.0.0/0 
443 (HTTPS) 0.0.0.0/0 

當我添加我的電腦的CIDR時,我可以很好地連接到實例,所以我很確定我的用戶名,密碼和主機是正確的。

+0

您是否嘗試過使用'連接到MySQL的RDS -u <你的DB-用戶名> -p <你的DB-密碼> -h <你-RDS-公共/私人的DNS>'?你可以嘗試它,併發布錯誤輸出,如果有的話?另外,從您的安全組,我沒有看到任何有關在您的RDS實例上打開MySQL端口3306的規則。這也可能是一面旗幟。 – rhetonik 2013-02-22 12:39:14

+0

你的意思是從EC2運行該命令?由於我可以從我的電腦登錄到RDS實例,所以端口似乎是開放的。 – yellowreign 2013-02-22 19:43:28

+0

是的,該命令將從您的EC2實例執行。您的RDS安全組指示該實例具有SSH,HTTP和HTTPS訪問權限,但不提供MySQL訪問權限。通過從本地PC登錄到RDS實例,您的意思是SSH登錄或MySQL登錄? – rhetonik 2013-02-25 12:25:22

回答

1

爲了解決這個問題,我說這條線在我的database.yml生產

socket: /opt/bitnami/mysql/tmp/mysql.sock 

,我跑我的Rails服務器指定生產爲一體的環境:

rails s -e production 
0

我認爲問題在於你的開發環境指向一個mysql本地,而不是RDS。 默認運行Rails的開發環境不是生產,所以我會嘗試加入生產的相同配置的開發:

development: 
    adapter: mysql2 
    encoding: utf8 
    database: mydbname 
    username: myusername 
    password: mypassword 
    host: mypublicdnsformydb 
    port: 3306