同じにやっても動かない

書いてある通りやっているのに動かないのです

SMARTalkが着信しない

Nexus6P (Android7.0) にSMARTalkを入れたのですが、Androidがスタンバイに入ってしばらくすると「ネットワーク不通」とSMARTalkが表示して着信できない状態になっている事に気が付きました。
多分以下で解決したと思います。

0. 設定 → 電池 を選ぶ

1. 右上のメニュータップして「電池の最適化」を選択

f:id:nyarugo:20161031235104p:plain


2. そこにSMARTalkが表示されていなかったら「すべてアプリ」タップし、SMARTalkを選択

f:id:nyarugo:20161031235217p:plain


3. 「最適化しない」を選択

f:id:nyarugo:20161031235259p:plain

ChefでDockerを入れるとVagrant upが終わらない

OSXVagrant入れてVMCentOS上で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]


そしてなぜかよくわからないのですが

  1. ゲストOSにDockerをインストールして
  2. ホストオンリーネットワークかブリッジネットワークを有効にする


と、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証明書がインストールされていることを確認してください。
f:id:nyarugo:20160120191225p:plain


色々調べてみたらSSL有効化チェックでcurlを使っているのだけど、サーバーにインストールされているcurlがSNI SSLに対応しておらずエラーを吐いている事がわかりました。
ネームスペースSSL激安で良いなあと思って飛びついたのですが、こんなところでハマるとは (^^;

というわけでSNI対応curlをビルドします。


1. SNI対応のopensslのビルド
※ OpenSSLのSNIサポートはOpenSSL 0.9.8j 以降のようです

curlsslをしゃべるわけではないようなので、まずは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でSNI SSLサイトに繋ぐと

$ curl https://www.snissl.com
curl: (51) SSL: certificate subject name '*.****' does not match target host name 'www.snissl.com'

となりますが、新しくビルドしたcurlで繋ぐとソースが表示されるはずです。

Raspberry Pi のプログラムをMacのXサーバーで実行

追記あり

Raspberry Pi を入手したのですが、HDMIモニターが家にないためXを動かしてもどうなっているのかわかりません。

なので、MacのXサーバーで描画してみることにしました。

  • MacのXサーバーを起動

MavericksではX11のサポートがなくなっていて、XQuartzをインストールするように誘導されました。
インストールしたらXQuartzを起動でXtermが立ち上がります。
これでOK。

  • サーバーへの接続許可設定

xtermで下記を実行

$ xhost +<Raspberry Piのアドレス>
  • X11転送オプションでssh接続

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


書いてある通りにやっていないので動かないの巻。