私は非常に奇妙な問題を抱えています。Amazon ec2 サーバーに mysql データベースをセットアップしています。ポート 3306 経由で接続できるように、Amazon ファイアウォールとルーター ファイアウォールを適切に開いています。次のように、コマンド ラインで Linux VM から ec2 サーバーに簡単に接続できます。
me@me-VirtualBox:~/host/workspace/rails-apps/sm$ mysql -h redacted.amazonaws.com -u redacted -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 4012389
Server version: 5.5.20 MySQL Community Server (GPL)
Copyright (c) 2000, 2011, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql>
したがって、接続は機能します。これにより、ファイアウォールを正常に通過できることが確認され、VM 内での実行によるおかしなビジネスは発生しません。だから今、私は次のようにRuby内から試してみます
require 'rubygems'
require 'mysql'
mycon = Mysql::new("redacted.amazonaws.com", "redacted", "redacted", "redacted")
symres = mycon.query("select * from symbols where symbol = \"AAPL\";")
symres.each do |symbol|
puts symbol[0].to_s
end
mycon.close
これにより、コマンド ラインに "AAPL" が出力されます。したがって、すべてがルビーの観点から機能しています。今度は ruby on rails を使って接続してみます。
development:
adapter: mysql2
encoding: utf8
reconnect: false
database: redacted
pool: 5
username: redacted
password: redacted
host: redacted.amazonaws.com
port: 3306
そこで、「rails server」コマンドを使用して、Rails サーバーを起動します。WebBRICK が正常に起動し、これが表示されます
me@me-VirtualBox:~/host/workspace/rails-apps/sm$ rails server
=> Booting WEBrick
=> Rails 3.2.7 application starting in development on http://0.0.0.0:3000
=> Call with -d to detach
=> Ctrl-C to shutdown server
[2012-08-18 10:00:08] INFO WEBrick 1.3.1
[2012-08-18 10:00:08] INFO ruby 1.8.7 (2011-06-30) [x86_64-linux]
[2012-08-18 10:00:14] INFO WEBrick::HTTPServer#start: pid=9977 port=3000
ブラウザウィンドウを開いて接続します
http://localhost:3000
クロムで。クロムは無期限に回転します。WebBRICK を起動したコンソール ウィンドウにメッセージが表示されません。Railsログに表示されるのはこれだけです:
Started GET "/" for 127.0.0.1 at Sat Aug 18 09:39:47 -0600 2012
Connecting to database specified by database.yml
5分間そのままにしておきますが、何も起こりません。ctrl-c で WebBRICK を強制終了する必要があります。
何が起こっているのかについての私の唯一の手がかりは、webrick がシャットダウンされた後、上記のように mysql を使用して接続しようとすると、次のエラーが発生することです。
me@me-VirtualBox:~/host/workspace/rails-apps/sm$ mysql -h redacted.amazonaws.com -u redacted -p
Enter password:
ERROR 1129 (HY000): Host 'redacted.co.comcast.net' is blocked because of many connection errors; unblock with 'mysqladmin flush-hosts'
したがって、これは ruby on rails が接続に失敗していることを示しており (おそらく再試行のループで)、Amazon サーバーの mysql db がこれを検出し、そのホストの接続をブロックしています。そのため、Amazon ホストにログインし、flush-hosts コマンドを実行すると、コマンド ラインまたは Ruby スクリプトから接続できます。しかし、レールを接続することはできません。
Rails バージョン: 3.2.7 Ruby バージョン: 1.8.7 私の SQL サーバー バージョン: 5.5.20
何か案は?レール内の接続エラーが何であるかをデバッグする方法に途方に暮れています。スタック トレース、クラッシュ、または何が起こっているのかをデバッグするのに役立つものを取得していません。