ChefでDockerを入れるとVagrant upが終わらない
OSXにVagrant入れてVMのCentOS上でDocker動かすというのをやっています。
環境はこんな感じ。
[ホストOS]
- OSX Yosemite
- Vagrant 1.8.4
- Virtual box 5.0.20
- chef Development Kit Version: 0.14.25
- chef-client version: 12.11.18
- berks version: 3.1.5
- kitchen version: 1.8.0
[ゲストOS]
- CentOS6.7 https://github.com/CommanderK5/packer-centos-template/releases/download/0.6.7/vagrant-centos-6.7.box
そしてなぜかよくわからないのですが
- ゲストOSにDockerをインストールして
- ホストオンリーネットワークかブリッジネットワークを有効にする
と、Vagrant upが
==> default: Configuring and enabling network interfaces...
で止まって永遠に帰ってこなくなります。
ここで強制終了して再起動かけると今度は以下が延々と表示されてやはりvagrant upが終わらない。
default: Warning: Remote connection disconnect. Retrying... default: Warning: Remote connection disconnect. Retrying... default: Warning: Remote connection disconnect. Retrying...
ループバックアドレスのみのときはちゃんと立ち上がるんですよね。
DEBUGモードでvagrant upしてみるとSSHでこけているみたいだったので、Google先生に聞いて色々試したのですがどれもだめでした。
ダメ元でゲストOSをCentOS7.1にしてみたところ、
問題解決しました(・∀・)
Chefが関係あるような投稿を英語サイトで見つけたのですが、Chef以外からのDockerインストールは試していないのでよくわからず。
理由はわかりません。。
SNI SSL対応のcurlをビルドする
SNI SSLに対応したcurlをビルドする必要があったので手順をメモしておきます。
事の発端はCS-CARTを導入したのもの、SSLを有効化しようとすると下記エラーが出て設定できなかったというもの。
HTTPS接続チェックに失敗しました。 "config.php" ファイル内のHTTPSに関する設定を確認のうえお使いのサーバーにSSL証明書がインストールされていることを確認してください。
色々調べてみたらSSL有効化チェックでcurlを使っているのだけど、サーバーにインストールされているcurlがSNI SSLに対応しておらずエラーを吐いている事がわかりました。
ネームスペースSSL激安で良いなあと思って飛びついたのですが、こんなところでハマるとは (^^;
というわけでSNI対応curlをビルドします。
1. SNI対応のopensslのビルド
※ OpenSSLのSNIサポートはOpenSSL 0.9.8j 以降のようです
curlがsslをしゃべるわけではないようなので、まずはcurlが使うopensslライブラリをSNI対応にする必要があります。
openssl-1.0.2e.tar.gzをダウンロードして
$ tar zxvf openssl-1.0.2e.tar.gz $ cd openssl-1.0.2e $ ./config shared zlib --prefix=/home/opt/openssl-1.0.2e $ make; make test; make install
2. SNI対応のopensslライブラリを使ってcurlのビルド
※ curlのSNIサポートは7.18.1以降のようです
curl-7.46.0.tar.gzをダウンロードして、環境変数export PKG_CONFIG_PATHに先にインストールしたopensslのpkgconfigのパスをセット
$ export PKG_CONFIG_PATH=/home/opt/openssl-1.0.2e/lib/pkgconfig $ cd curl-7.46.0 $ ./configure --with-ssl --prefix=/home/opt $ make; make install
SNI SSLに対応していないcurlでSNI SSLサイトに繋ぐと
$ curl https://www.snissl.com curl: (51) SSL: certificate subject name '*.****' does not match target host name 'www.snissl.com'
となりますが、新しくビルドしたcurlで繋ぐとソースが表示されるはずです。
もうなんにも覚えていない
久々に、そして初の商用サイトをRailsで開発しないといけなくなったけど、1年以上触っていないのでもう何も覚えていない。。
Raspberry Pi のプログラムをMacのXサーバーで実行
追記あり
Raspberry Pi を入手したのですが、HDMIモニターが家にないためXを動かしてもどうなっているのかわかりません。
なので、MacのXサーバーで描画してみることにしました。
- MacのXサーバーを起動
MavericksではX11のサポートがなくなっていて、XQuartzをインストールするように誘導されました。
インストールしたらXQuartzを起動でXtermが立ち上がります。
これでOK。
- サーバーへの接続許可設定
xtermで下記を実行
$ xhost +<Raspberry Piのアドレス>
xtermで下記でRaspberry Piに接続
$ ssh -X user@<Paspberry Piのアドレス>
- あとはRaspberry Pi上からプログラムを起動するだけで、Mac側に描画されます。
[追記]
Xquartzを立ちあげなくても、-X オプション付きで slogin すれば自動でX serverが立ち上がりました。
RspecのControllerテストでDragonflyのモデルに新規レコードを登録する
RspecのControllerテストでの添付ファイルの作り方がよくわからなかったのですが、こんな感じでできましたのでメモ。
Dragonflyのモデル定義のphoto.rbはこんな感じ。
class Photo < ActiveRecord::Base attr_accessible :photo_image end
photo_controller_spec.rbはこんな感じです。
describe PhotosController do filepath = "/OK.jpg" post :create, photo: { photo_image: fixture_file_upload(filepath, 'image/jpg') } it do response.response_code.should == 200 end end
fixture_file_uploadにアップロードしたいファイルのパスを渡して、content-typeを指定するだけで、temp fileとしてアップロードしてくれます。
filepathは、"$APP_ROOT\spec\fixtures" 以下のパスを指定します。
ではでは。
devise + Rspec でログイン状態のテストをしようとしたら動かなかった
今回も書いてあるとおりにやっていたつもりなのですが、動きませんでした。
そして、よく見たら書いてある通りにやっていなかったというお話です。
やり方はここに書いてある通りです。
書いてある通りに書いた(つもり)specがこれ。
describe "ログインユーザの POST" do before do login_user # ログイン @model = build(:model) post :create, model: @model.attributes end it { response.should be_success } end
そんでもってコンソールに出たエラーがこれ。
undefined local variable or method `login_user' for #<RSpec::Core::ExampleGroup::Nested_1::Nested_12:0x96e6730>
何がわるかったかというと、login_userをコールする位置でした。
理由まで調べていませんが、beforeやit method の中でコールするとこのエラーが出ます。
参考URLに書いてある通り、describeのすぐ後でコールしたらうまくいきました。
こんな感じ。
describe "ログインユーザの POST" do # ここでコール! login_user before do @model = build(:model) post :create, model: @model.attributes end it { response.should be_success } end
書いてある通りにやっていないので動かないの巻。