Ubuntu

使用 AWS Ubuntu 和 RDS 部署時出現 mysql.sock 錯誤

  • August 6, 2014
Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)
Rails.root: /opt/deployment.myproject/releases/20140805050704

我花了 3 天的大部分時間試圖找到這個問題的答案。還試圖了解幕後發生的事情,但現在我認為現在是向世界尋求幫助的好時機!

我在 Ubuntu AMI、EC2 和 RDS 上使用 AWS 部署 Ruby on Rails 應用程序。我決定使用 MSQL 數據庫,因為這就是我建構我的應用程序所使用的,它讓我使用 RDS。

由於我使用的是 RDS,並且必須提供端點、使用者名和密碼,因此我認為錯誤中的“本地”提示可能告訴我它認為數據庫是本地的。我相信這不是因為它與我的 EC2 位於不同的實例上並被連結到。(阿米爾特?)

我嘗試使用許多不同類型的“find”和“grep”命令搜尋 mysql.sock 文件。那些真正得到搜尋的人會返回一個巨大的目錄列表,顯示類似“沒有權限”的內容。

我還在錯誤顯示的路徑中搜尋了它,但執行目錄中沒有 mysql 目錄。

我認為可能有助於回答這個問題的幾個問題..

這個文件究竟是什麼時候創建的?什麼時候創建數據庫?那麼這個文件不應該在RDS實例上嗎?或者它是在我執行“cap deploy:setup”或“cap deploy”時創建的?

因為它說“Rails.root”,所以我認為它正在尋找從應用程序的根目錄開始的文件,特別是。所以像 app/var/run…etc 而不是實際的根目錄。

哦,順便說一句。當我通過 FTP 進入 EC2 實例時,我也會收到此消息。

Could not change directory to “var/run/mysqld/mysqld.sock' (2)  
Rails.root:/opt/deployment.myproject/releases/20140803230821”.

**另外:**我能夠通過 Sequel Pro 連接到 RDS,並且我的遷移通過 Capistrano 完美執行,因為我所有的表都在那裡!

我想我已經說得夠多了。以下是一些可能相關的文件:

為簡潔起見縮短 my.cnf

   [client]
   port        = 3306
   socket      = /var/run/mysqld/mysqld.sock

   # Here is entries for some specific programs
   # The following values assume you have at least 32M ram

   # This was formally known as [safe_mysqld]. Both versions are currently parsed.
   [mysqld_safe]
   socket      = /var/run/mysqld/mysqld.sock
   nice        = 0

   [mysqld]
   #
   # * Basic Settings
   #
   user        = mysql
   pid-file    = /var/run/mysqld/mysqld.pid
   socket      = /var/run/mysqld/mysqld.sock
   port        = 3306
   basedir     = /usr
   datadir     = /var/lib/mysql
   tmpdir      = /tmp
   lc-messages-dir = /usr/share/mysql

數據庫.yml

   production:
     adapter: mysql2
     database: <censored db name> 
     host: <censored endpoint>
     username: <censored username>
     password: <censored password>
     port: 3306
     pool: 5
     timeout: 5000

部署.rb

   role :web, '<censored db name>'
   role :app, '<censored db name>'
   role :db,  '<censored db name>', primary: true

   set :rails_env,    'production'
   set :webroot,      '/opt/myproject'        # specify directory symlink
   set :deploy_to,    '/opt/deployment.myproject'
   set :user,         'ubuntu'
   set :use_sudo,     false
   set :bundle_flags, '--deployment --quiet' # some bundler options

   after 'deploy:update_code', 'deploy:symlink_shared'
   after 'deploy:update_code', 'deploy:migrate'

   load 'deploy/assets' # results in 'rake assets:precompile' during deploy

Capistrano 設置為使用生產環境,但無論您使用什麼命令/腳本/等來實際啟動盒子上的 Rails 應用程序,都可能處於開發模式。

export RAILS_ENV=production
bin/rails s

引用自:https://serverfault.com/questions/617978