Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2) Rails.root: /opt/deployment.myproject/releases/20140805050704
我已经花了3天的好时间试图find这个问题的答案。 也试图了解幕后发生的事情,但现在我认为现在是向全世界求援的好时机!
我正在使用AWS在Ubuntu AMI,EC2和RDS上部署Ruby on Rails应用程序。 我决定去一个MSQL数据库,因为这是我build立了我的应用程序,我有使用RDS。
由于我使用的是RDS,而且我必须提供一个端点,用户名和密码,所以我想这个错误提示“local”可能会告诉我它认为数据库是本地的。 我相信这不是因为它与我的EC2有不同的实例,而是与其链接。 (Amirite?)
我试图用许多不同types的“find”和“grep”命令search一个mysql.sock文件。 实际上得到search的那些人返回了一个巨大的目录列表,显示“没有权限”。
我也在错误显示的path上search它,但在运行目录中没有mysql目录。
我想这个问题可能有助于回答这个问题。
什么时候创build这个文件? 当数据库被创build? 那么这个文件不应该在RDS实例上吗? 或者当我运行“cap deploy:setup”或“cap deploy”时创build?
既然它说“Rails.root”我想这是从应用程序的根,特别是从文件开始寻找。 所以像app / var / run …等等,而不是实际的根。
哦,顺便说一下。 当我进入EC2实例的FTP时,我也收到了这个消息。
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
database.yml的
production: adapter: mysql2 database: <censored db name> host: <censored endpoint> username: <censored username> password: <censored password> port: 3306 pool: 5 timeout: 5000
deploy.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