EC2からRDSに接続しようとしたら「ERROR 2003 (HY000): Can’t connect to MySQL server」が出た
しばらく構築していないとさっぱり忘れてしまうのがAWSの設定
今回RDSを作成したので、EC2から接続しようとしたところ、、、
$ mysql -h mysql–instance1.123456789012.us-east-1.rds.amazonaws.com -P 3306 -u master_user -p Enter password: ERROR 2003 (HY000): Can't connect to MySQL server on 'kintaidb.cisfvswdjdlg.ap-northeast-1.rds.amazonaws.com' (110)
ん?接続できないとな!?
「ERROR 2003 (HY000): Can’t connect to MySQL server」
はじめはポート指定-P 3306
さえしていなかったので「はいはい」という感じだったのですが、
ポートを設定しても改善せず・・・
結論、セキュリティグループの設定不足
原因は非常に単純で、RDSさんが外からのアクセスを受け付けていませんでした。
なのでRDSに適用しているセキュリティグループの設定を変更します。
- 設定変更
DS作成時に特に設定していなければ「rds-launch-wizard-1 (sg-xxxxxxx)」みたいのが設定されているはずなので
以下のように変更
- 接続確認
$ mysql -h mysql–instance1.123456789012.us-east-1.rds.amazonaws.com -P 3306 -u master_user -p Enter password: Welcome to the MariaDB monitor. Commands end with ; or \g. Your MariaDB connection id is 332 Server version: 10.3.8-MariaDB-log Source distribution Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. MariaDB [(none)]>
これで無事に繋がるようになりました。
(いつまでも覚えていられる頭がほしい。。)
【AWS】EC2作ったらまずはrootユーザのパスワードを設定しよう
新規にEC2インスタンスを作って「さぁなにかやろう」となると大概こんなエラーが出ます。
$ yum install httpd 読み込んだプラグイン:extras_suggestions, langpacks, priorities, update-motd このコマンドを実行するには root である必要があります。
そんで su してルートユーザで作業しようとすると、
$ su パスワード: su: 認証失敗
なんて出てきて、そもそもパスワード設定なんてしたっけ?って状態になる。 もちろん設定なんてしていない・・
AWSの新規インスタンスはrootユーザのパスワードが設定されていないそうなので、ちゃんと設定してあげましょう。
rootユーザのパスワード設定方法
とりあえず ec2-user でログイン
$ ssh ec2-user@xxx.xxx.xxx.xxx -i hoge.pem
- xxx.xxx.xxx.xxx: パブリックIP
- hoge.pem: キーペア
rootユーザにクラスチェンジ
$ sudo su -
rootユーザのパスワード変更
# passwd Changing password for user root. New password: (パスワードを入力) Retype new password:(もう一回) passwd: all authentication tokens updated successfully.
無事にパスワードの変更完了❗
$ su パスワード: # yum install httpd 読み込んだプラグイン:extras_suggestions, langpacks, priorities, update-motd amzn2-core | 2.4 kB 00:00:00 依存性の解決をしています --> トランザクションの確認を実行しています。 ~~~中略~~~ 依存性関連をインストールしました: apr.x86_64 0:1.6.3-5.amzn2.0.2 apr-util.x86_64 0:1.6.1-5.amzn2.0.2 apr-util-bdb.x86_64 0:1.6.1-5.amzn2.0.2 generic-logos-httpd.noarch 0:18.0.0-4.amzn2 httpd-filesystem.noarch 0:2.4.37-1.amzn2.0.1 httpd-tools.x86_64 0:2.4.37-1.amzn2.0.1 mailcap.noarch 0:2.1.41-2.amzn2 mod_http2.x86_64 0:1.11.1-1.amzn2 完了しました!
これでいろいろできるようになりました! こういうちょっとしたことで詰まるから作業が進まないんだよな。。。
【Androidアプリ開発】adbコマンドをMacのターミナル上で使えるようにする
こんにちは
最近ようやっとターミナル上でadbコマンドを使うようになりました。
特にコツとかはないですが設定方法をまとめておきます。
実機のAndroid端末のログが見たい!
いつもAndroid Studioを通してデバッグしていましたが、「cordova run android」 で実機にアプリを登録したあと、
ログってどうやってみるの???
という初心者丸出しな自体にぶち当たってしまいました。
皆さんご存知かとは思いますが、私のようなレベルの方向けに設定方法を記載しておきます。
設定方法
とりあえずパスが通っているか確認しましょう。 コンソールで「adb」と打ちこんでみます。
$ adb zsh: command not found: adb
はい、そんなコマンドは知らん!というメッセージが返ってきましたね。
これは adb というコマンドにパスが通っていないためです。
なので、adbコマンドへパスを通しましょう。
↓↓パスの記載場所はこちら↓↓
「このパス+platform-tools」を、.bash_profile なり、.bashrcなりのターミナル起動時に読み込まれるファイルに記載すれば準備オッケーです。
(私はzshを使用しているのでとりあえず.zshrcに記載しました。)
(~/.zshrc) 下の行を「ドットファイル」の最終行に追記 export PATH=$HOME/Library/Android/sdk/platform-tools:$PATH
追記したらファイルを再読み込みします。
$ source ドットファイル名 例)./zshrcの場合 $ source ./zshrc
これでパスが通りました。
本当に通っているか確認しておきましょう。
コンソールで「adb」と打ちこんでみます。
$ adb Android Debug Bridge version 1.0.39 Revision 3db08f2c6889-android ~~~ 省略 ~~~
「command not found: adb」が表示されていなければ成功です。
まとめ
これでadbコマンドが使えるようになりました。
ログ参照の他に、端末のモニタリングとかインストールされているアプリの確認とかできるようです。
面白そうなので色々試してみます!
cordova run android コマンドで 「Error: spawn EACCES」が発生した時の解決方法
cordovaアプリを実機で試してみようと
$ cordova run android
を実行したら
$ cordova run android ANDROID_HOME=/Users/user/Library/Android/sdk JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_152.jdk/Contents/Home Subproject Path: CordovaLib Error: spawn EACCES
なんてエラーが発生しました。
特に設定とかを変更したつもりはなかったのですが、、、
ググってもうまく改善できずしばらくハマったので、解決方法をメモっておきます。
原因: 権限不足
どうやら 「Error: spawn EACCES」と表示されるのは実行権限が問題のようです。
何も変更したつもりはないのですけどね。
解決方法
とりあえず何を実行しようとして怒られているのか調べてみましょう。
verboseを指定して出力内容を見ます。
$ cordova run android --verbose ~~~ 省略 ~~~ ANDROID_HOME=/Users/user/Library/Android/sdk JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_152.jdk/Contents/Home Subproject Path: CordovaLib Running command: /Users/user/project/cordova/platforms/android/gradlew cdvBuildDebug -b /Users/user/project/cordova/platforms/android/build.gradle -Dorg.gradle.daemon=true -Dorg.gradle.jvmargs=-Xmx2048m -Pandroid.useDeprecatedNdk=true Error: spawn EACCES
どうやら「Running command: /Users/user/project/cordova/platforms/android/gradlew」というところでエラーになっているようですね。
EACCESは実行権限の問題なので gradlew に実行権限を与えます。
$ chmod +x /Users/user/project/cordova/platforms/android/gradlew
そして再実行してみます。
$ cordova run android --verbose ~~~ 省略 ~~~ ANDROID_HOME=/Users/user/Library/Android/sdk JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_152.jdk/Contents/Home Subproject Path: CordovaLib Running command: /Users/user/project/cordova/platforms/android/gradlew cdvBuildDebug -b /Users/user/project/cordova/platforms/android/build.gradle -Dorg.gradle.daemon=true -Dorg.gradle.jvmargs=-Xmx2048m -Pandroid.useDeprecatedNdk=true ↑↑↑ エラーになっていたコマンド google-services plugin could not detect any version for com.google.android.gms or com.google.firebase, default version: 9.0.0 will be used. please apply google-services plugin at the bottom of the build file. ~~~ 省略 ~~~ LAUNCH SUCCESS
無事にアプリが実機で起動できました。
まとめ
どうやら原因はAndroid Studioのアップデートをしたことのようです。
gradeの実行権限が変わっちゃったんですね。
iOSなんかでもあるけど、アップデートでいきなり権限を書き換えるのはやめてほしいな〜。
以下の記事が参考になりました。 ありがとうございました。
【Rails】ポート番号を指定してRailsサーバを起動する方法
こんにちは
開発環境でRailsのサーバを起動するときって、いつもこんなコマンド打ちますよね?
bundle exec rails s
今までこれで起動して困ることはなかったのですが、複数のサーバを同時にあげようとしたときに「どうすんだ?」って軽くはまったのでメモです。
複数のRailsサーバを起動するには
ローカルの開発環境で複数のRailsサーバを起動するときはポート番号を指定します。
冒頭で打ったコマンドに「-p」オプションをつけると指定可能になります。
$ bundle exec rails s -p 3001 => Booting WEBrick => Rails 4.2.2 application starting in development on http://localhost:3001 => Run `rails server -h` for more startup options => Ctrl-C to shutdown server [2016-04-30 06:47:48] INFO WEBrick 1.3.1 [2016-04-30 06:47:48] INFO ruby 2.3.0 (2015-12-25) [x86_64-darwin15] [2016-04-30 06:47:48] INFO WEBrick::HTTPServer#start: pid=38169 port=3001
これで、http://localhost:3001でサーバにアクセスできるようになります。
サーバ起動時によく使うオプション
私がサーバ起動時によく使うオプションはこんな感じです。
-p(--port=port):サーバを起動するときのポート番号を指定する
初期値:3000
使用例:ポート番号3001番でサーバを起動する
$ bundle exec rails s -p 3001
-b (--binding=ip):バインドするIPアドレスを指定する
使用例:他の端末からアクセスできるように指定
$ bundle exec rails s -b 0.0.0.0
-e (--environment=name):環境(test/development/production)を指定してサーバを起動する
初期値:development
使用例:production環境としてサーバを起動
$ bundle exec rails s -e production
そのほかのオプション
私はほとんど使わないのですが、他にはこんなオプションがあります。
オプション | 説明 | 初期値 |
---|---|---|
-c (--config=file) | rackupファイルを指定 | |
-d (--daemon) | デーモンとしてサーバを起動 | |
-u (--debugger) | デバックモード | |
-P (--pid=pid) | PIDファイルを指定 | tmp/pids/server.pid |
-h (--help) | ヘルプを表示 |
最後に
複数プロジェクトを並行して開発しているときなんかに使うことがあるかもなので覚えておいて損はないオプションです。
いろんなオプションを覚えてどんどんRails力を上げていきましょう!
S3バケットにアップロードしたファイルを一括ダウンロードする方法
S3に置いてあるファイルを一括でタウンロードしたい
既存の Wordpress サイトを Local by Flywheel に移行するため、S3に上げたファイルを一括ダウンロードする必要が出てきたのですが、、
S3のファイルってAWSコンソールからだと一つずつしかダウンロードできないのですね。。
リソースが少ない場合はそれで問題ないのですが、私は画像ファイルやらなんやらをたくさん置いていたので大問題。
結論、AWS-CLIを使えば可能!
google先生に聞いた結果、AWS-CLI(AWS Command Line Interface )というものを使えばできる!ということがわかりました。
AWS-CLIってなんじゃい!という方はこちらをご参照ください。
やり方がわかってしまえばあとは簡単。
$ aws s3 cp s3://S3バケット名/ ダウンロード先パス --recursive
はい、コマンド一発!
一応コマンドの補足をしておきますと、
- aws s3: S3を操作するAWS-CLI のコマンド名
- cp: コピーして持ってくるということ(S3のファイルはそのまんま)他にmv, rm, ls などがある
- S3バケット名: 名前の通りS3のバケット名
- ダウンロード先パス: ローカルの保存先(例: ~/Downloads)
- --recursive: バケット内のフォルダを再帰的に辿ってくれる。要はバケットの中身全部持ってくるということ
感想
【JavaScript】Date型の値を比較するには
こんにちは。
なぜかDate型の比較がうまくいかったので調べてみました。
同じ日付、時刻でもイコールにならない
同一の日時を持っていても別オブジェクトの場合、「==」とか「===」での比較はfalseになる
「<」とか「>」はうまくいくのに・・・
date = "Tue Mar 15 2016 00:00:00 GMT+0900 (JST)" new Date(date) == new Date(date) // false new Date(date) === new Date(date) // false
chromeの開発者ツールでも確認できるので、自分で動かして確認すると理解しやすい
getTime()を使用すると比較できる
Javaならequals()を使いたいとこだが、そうも言ってられないのでDate.prototype.getTime を使用して比較する。
date = "Tue Mar 15 2016 00:00:00 GMT+0900 (JST)" new Date(date).getTime() == new Date(date).getTime() // true new Date(date).getTime() === new Date(date).getTime() // true
最後に
「==」とか「===」で普通に比較が成功すればいいのに・・・