Logical Rabbit.

さくらのVPS

Ruby

DockerのMySQLでRails環境を作っていたらハマったメモ。

Docker の mysql でMySQLサーバを起動して、Rails環境のほうが既存コードで開発環境でも一般ユーザを作ってDBアクセスする仕組みにしていたので、 MYSQL_DATABASE, MYSQL_USER, MYSQL_PASSWORD を使ってDBとユーザを自動で作らせようとしたのだけど…ハマった。

Rails側が app、DB側が db と思いなせぇ。

取り敢えずMigrationエラー出るのは承知でRails側を起動させ、アクセスしてみたところ、以下のエラーが発生。

app_1  | Mysql2::Error::ConnectionError (Access denied for user 'user'@'test_app_1.test_default' (using password: YES)):

もちろんパスワードとかは合ってる。アクセス拒否されたユーザ名のホスト名部分が test_app_1.test_default となっているのだけど、当初ここを「アクセス先」と誤認してしまい、 DBコンテナのホスト名がどこかで混線してる??? と考えてあちこち弄ったりデバッグコード仕込んでみたりして調べること、約1日。

ちがうよねー

これはアクセス元(app)のホスト名が、MySQL側に登録されていないので拒否られているのよねー。

で。気付いたので MYSQL_USER を user@test_app_1.test_default にしてみたり(これだと docker-compose run するたびにホスト名が変わるのでよろしくない)、 user@% にしてみたり(というか元々こうなる気がするんだが…)したのだけど、結局うまく行かず、面倒くさいので Rails 側のDBユーザ名を root に変えてしまいましたとさ。

どっとはらい。

…まあ、後々必要になりそうな気もするので、今度どのように書くのが良いのか、ちゃんと調べようかと(今はただRailsアプリの動作環境を作ってコーディングをせねばならぬ)

そんな平成最後の年度末。

Rubyコードでパスワードを簡易生成したいとき。

ググってみると、大抵以下のようなコードが多数見つかる。

ruby -e 'p [*1..9, *"a".."z", *"A".."Z"].sample(8).join'

これ、

ruby -e 'p [*"!".."z"].sample(8).join'

でいいんぢゃねぇです? 文字コード的に半角スペース, "!" , …数字…大文字アルファベット…小文字アルファベット、と続くので。まあパスワードに半角スペース入れると入力が厄介なことになりそうだからその次の "!" から始めるとして。

あ、でも " とか ' とか ` あたりもパスワードに含めると扱いがアレ気になりそうだから、

ruby -e 'p [*"!".."z"].reject {|c| %w"\" '"'"' \`".include? c }.sample(8).join'

くらいで、どうですかね?

ruby コンパイル+XML関連開発に必要なライブラリ

CentOSでRubyをソースコンパイルするときに、いつも事前インストールしているライブラリ群です。個人的にXMLを扱う開発が多いので、XML関連のライブラリも一緒に入れています。

このままコピペして yum install すればまとめて導入できるはず。

openssl openssl-devel readline readline-devel ncurses ncurses-devel gdbm gdbm-devel libffi libffi-devel zlib zlib-devel bison mysql mysql-devel mysql-server sqlite-devel libxml2 libxml2-devel libxslt libxslt-devel libyaml libyaml-devel

[2016.06.04 追記]

Ruby 2.2.1ビルド時にlibffi-develが無くて怒られたので追記しました。

さらにCentOS 7用に mysql を mariadb に変更。

openssl openssl-devel readline readline-devel ncurses ncurses-devel gdbm gdbm-devel libffi libffi-devel zlib zlib-devel bison mariadb mariadb-devel mariadb-server sqlite-devel libxml2 libxml2-devel libxslt libxslt-devel libyaml libyaml-devel