使用 AWS Ubuntu 和 RDS 部署時出現 mysql.sock 錯誤
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