継続的ブログ

主にweb系の技術について書いています

Docker Toolbox使ってみたけど、エラーでちょっとハマった話

Docker Toolboxがリリース

Docker Toolbox | docker

ということで、Dockerはあまり触ったことがないのですが、『Dockerエキスパート養成読本』片手に入門がてら触ってみました。
しかし、初っ端からエラーでハマったのでメモ。

環境

① 「Docker Quickstart Terminal」を起動しても、エラーでVM立ち上がらない

Starting machine default...
exit status 1
Started machines may have new IP addresses. You may need to re-run the `docker-machine env` command.

下記URLを参考にVirtualBoxのTestBuild(5.0.3)をインストールしたら、起動するようになりました。

Docker-Machine : "Error creating machine: exit status 1" · Issue #1716 · docker/machine · GitHub

VM起動するようになったけど、docker runやimagesでエラー出る

 Post http:///var/run/docker.sock/v1.20/containers/create: dial unix /var/run/docker.sock: no such file or directory.
 * Are you trying to connect to a TLS-enabled daemon without TLS? 
 * Is your docker daemon up and running?
  1. Kitematicを立ち上げてみる。
    同じエラーがTOPに出てる。

  2. 「Delete VM and Retry Setup」ボタンをクリック。

  3. Sign in画面的なものが出れば成功。

参考

Dockerエキスパート養成読本[活用の基礎と実践ノウハウ満載!] (Software Design plus)

Dockerエキスパート養成読本[活用の基礎と実践ノウハウ満載!] (Software Design plus)

Devise&OmniauthでFacebook認証したいけど、emailがnilで返ってきてハマった

追記
gemのアップデートで取れるようになりそうですね!
omniauth-facebook+GraphAPI ver 2.4でemailフィールドが取得されない件の対応 - Qiita

Railsで作っているサービスで、DeviseとOmniauthを使って認証系実装している時にちょっとハマったお話。

FacebookではEメールが普通に取得できるはずでは?

Twitterでは入ってこないが、Facebookでは下記のようにすればEメールが取得できるはず。

user.email = auth.info.email

しかし、nilで返ってくる。
auth.infoの中身を見ても、そもそもemailがない。

FacebookAPIが2.4にアップデートされたことが原因

OmniAuth: Overview · plataformatec/devise Wiki · GitHub

ここに書いてありました。

config.omniauth :facebook, "APP_ID", "APP_SECRET", scope: 'email', info_fields: 'email, name'

こう書けば取れるようになりました。

rails console上でのSQL表示をデフォルトに

rails consoleで、どんなSQLが発行されているかその場で確認したい

logをみれば確認できますが、面倒くさいですよね。
rails consoleで下記コマンドを打てばOKです!
ActiveRecordのログの出力先を標準出力に変更することが出来ます。

ActiveRecord::Base.logger = Logger.new(STDOUT)

毎回打つの面倒だし、毎回忘れて検索してるし、もうデフォルトにしたい

何回か使ってるとこんなことになってきます。
そんな人はデフォルトにしてしまいましょう!

自分はPryを使っているので、~/.pryrcに下記追加。
irbの人は、~/.irbrcでいいと思います。

if defined?(Rails::Console)
  ActiveRecord::Base.logger = Logger.new(STDOUT)
end

参考

クックブックが反映されない問題

「rbenv」のコミュニティクックブックから、「rbenv」という同名のオリジナルクックブックに置き換えた
⇒ オリジナルクックブックに更新されず、コミュニティクックブックのまま。

なぜ?

Breksfileに以下の記述をして、cookbooksディレクトリにもちゃんとオリジナル版が入ってるのに。

cookbook "rbenv", path: "./site-cookbooks/rbenv"

なぜかコミュニティ版が反映されてしまう。

キャッシュがきいているのか?

いろいろ試したが・・・

  • cookbooksディレクトリ削除して、入れ直したり
  • ~/.berkshelf/cookbooksを削除して、入れ直したり

ダメでした。

最終手段

同名だから、同じものとみなされてしまっているのかも。 ってことで、オリジナルクックブックのバージョンをコミュニティクックブックのバージョンより上に設定してみたら、うまくいきました。

コミュニティ: 1.7.1
オリジナル: 0.1.0 ⇒ 1.8.0

でも、モヤモヤが残る。
いい方法があったら、どなたかご教示頂けると幸いです。

AWS Summit DevCon2日目に行ってきました!

やっぱりこういうのに出席するのはいいですね。

全部素晴らしかったのですが、私が特に感動したのは「クックパッドはなぜ開発しやすいか(クックパッド株式会社 成田一生さん)」です。

speakerdeck.com

業務でRailsを触っていて、ゲーム系よりサービス系を作りたいと思っている自分にはとてもいい刺激になりました。
Railsを業務で使っている人、サービス開発をしている人は必見です。

とにかく全てのスケールのデカさに驚きました。
特に一番驚いたのがModelの数。
1732って・・・

どうやって開発しているのか気になるなあ。
この数を開発者全員が全て把握できているとは思えないし。
今度は是非、そこら辺の話もお聞きたい!(もうしてたらすみません・・・)

あと、作っているのは「機能」ではなく「サービス」「ユーザ体験」というところ。
耳が痛いです・・・
振り返ってみると、早さを優先してしまって、完全に「機能」を作ってたなと思うことが多々あります。
これからは気をつけよう。
そして、そういう文化を作りたいなあ。

とりあえず全部参考になった、面白かった!
クックパッドさんの並々ならぬ努力が伝わってきました。
やっぱりクックパッドさんはすごい!

オリジナルクックブックの作成

Vagrant + ChefでRails開発環境構築② - 継続的ブログ

あれからちょくちょく修正していっています。
いろいろなところで「最初は慣れるために、コミュニティクックブックを使わないようにしましょう」と言われていますが、自分は最初にコミュニティクックブックで一通り構築して、少しずつ自分好みに修正して行く方が合ってたみたいです。
Chefで何度か挫折した人はこの方法でやってみるといいかもしれません。
Chefの便利さを最初に知れるだけで、モチベーションが上がると思います。

で、今回はオリジナルクックブックの作り方です。

手順

オリジナルクックブックはsite-cookbooksディレクトリに入れるので、ディレクトリを作成します。

$ mkdir site-cookbooks

site-cookbooksに移動します。

$ cd site-cookbooks

hogeというクックブックを作ります。

$ chef generate cookbook hoge

Berksfileに追記します。

cookbook "hoge", path: "./site-cookbooks/hoge"

前回のブログで書いた通り、vagrant-chef-zeroプラグインはcookbooksディレクトリに置かれたクックブックをChef Zero Serverにアップロードするので、site-cookbooksを修正したら、下記コマンドを打つのを忘れずに。

$ berks vendor cookbooks

Vagrantfileのrun_listに追加します。

chef.run_list = [
  "hoge"
]

provisionersの実行。

$ vagrant provision

参考

Vagrant と Chef による仮想環境構築の自動化(VirtualBox編) | オブジェクトの広場

Vagrant + ChefでRails開発環境構築②

追記
(2015/05/26)激古なNginxがインストールされてしまうため、使用するnginxのレシピを「nginx::source」に変更しました。それに伴い、chef.json内にnginxの設定を追加しました。

Vagrant + ChefでRails開発環境構築① - 継続的ブログ

続きです。
Railsの環境を構築していきます。
クックブックは自作せず、コミュニティのクックブックを使用しています。
細かい設定はしていません。
コミュニティクックブックに頼るのはあまりいい方法とは言えませんが、手軽に試せる開発環境を目指しました。

Berksfileの作成

カレントディレクトリにBerksfileというファイルを作成し、以下のように記述します。

source "https://api.berkshelf.com"

cookbook "vim"
cookbook "ruby_build"
cookbook "rbenv", github: "fnichol/chef-rbenv"
cookbook "git"
cookbook "mysql", "~> 5.3.6"
cookbook "nginx"

クックブックをダウンロード

$ berks vendor cookbooks

このコマンドで、cookbooksディレクトリにクックブックをダウンロードしてきます。
vagrant-chef-zeroプラグインはCookbooksディレクトリに置かれたクックブックをChef Zero Serverにアップロードします。

Vagrantfileの修正

Vagrantfileに、実行するクックブックと設定を追記します。

...

# private ipでアクセスできるように設定 
config.vm.network "private_network", ip: "192.168.50.12"

config.vm.provision :chef_client do |chef|
    chef.custom_config_path = "chef_custom_config"
    chef.run_list = [
      "vim",
      "ruby_build",
      "rbenv::user",
      "git",
      "mysql::server",
      "mysql::client",
      "nginx::source"
    ]
    chef.json = {
      "rbenv" => {
        "user_installs" => [
          {
            "user" => "vagrant",
            "rubies" => ["2.2.2"],
            "global" => "2.2.2",
          }
        ]
      },
      "mysql" => {
        "version" => "5.6",
        "port" => "3306",
        "server_root_password" => "vagrant",
        "remove_anonymous_users" => true
      },
      "nginx" => {
        "version" => "1.9.0",
        "source" => {
          "checksum" => "ここにチェックサムを入力"
        }
      }
    }
  end

...

ちなみに、nginxは/opt以下にインストールされます。

checksumの生成方法

まず、wget等でnginx.tar.gzをダウンロードします。

$ curl -o nginx-1.9.0.tar.gz http://nginx.org/download/nginx-1.9.0.tar.gz

次にダウンロードしたファイルに対して、下記コマンドでchecksumの生成をします。

$ shasum -a 256 nginx-1.9.0.tar.gz

出てきた文字列を先程の場所に入力すればOKです。

Provisionersの実行

$ vagrant provision

参考