gem pgインストール時にエラー

vagrant上のUbuntuでails + postgresqlをインストールしました

事前にpostgresqlをインストール

$ sudo apt-get install postgresql postgresql-contrib

Gemfileに

pg

を追記して

$ bundle install

エラー発生

Gem::Ext::BuildError: ERROR: Failed to build gem native extension.

    /home/vagrant/.rbenv/versions/2.2.0/bin/ruby -r ./siteconf20150331-4671-5j34dh.rb extconf.rb 
checking for pg_config... yes
Using config values from /usr/bin/pg_config
You need to install postgresql-server-dev-X.Y for building a server-side extension or libpq-dev for building a client-side application.
You need to install postgresql-server-dev-X.Y for building a server-side extension or libpq-dev for building a client-side application.
checking for libpq-fe.h... no
Can't find the 'libpq-fe.h header
*** extconf.rb failed ***
Could not create Makefile due to some reason, probably lack of necessary
libraries and/or headers.  Check the mkmf.log file for more details.  You may
need configuration options.

Provided configuration options:
        --with-opt-dir
        --without-opt-dir
        --with-opt-include
        --without-opt-include=${opt-dir}/include
        --with-opt-lib
        --without-opt-lib=${opt-dir}/lib
        --with-make-prog
        --without-make-prog
        --srcdir=.
        --curdir
        --ruby=/home/vagrant/.rbenv/versions/2.2.0/bin/$(RUBY_BASE_NAME)
        --with-pg
        --without-pg
        --enable-windows-cross
        --disable-windows-cross
        --with-pg-config
        --without-pg-config
        --with-pg_config
        --without-pg_config
        --with-pg-dir
        --without-pg-dir
        --with-pg-include
        --without-pg-include=${pg-dir}/include
        --with-pg-lib
        --without-pg-lib=${pg-dir}/lib

extconf failed, exit code 1

Gem files will remain installed in /home/vagrant/.rbenv/versions/2.2.0/lib/ruby/gems/2.2.0/gems/pg-0.18.1 for inspection.
Results logged to /home/vagrant/.rbenv/versions/2.2.0/lib/ruby/gems/2.2.0/extensions/x86-linux/2.2.0-static/pg-0.18.1/gem_make.out
Installing html2slim 0.2.0
Installing unf 0.1.4
An error occurred while installing pg (0.18.1), and Bundler cannot continue.
Make sure that `gem install pg -v '0.18.1'` succeeds before bundling.

libpq-devが足りなかったみたい

$ sudo apt-get install libpq-dev

で、再度実行でうまくいきました

Cakephpでajaxを使って非同期にすっきりpostする

CakephpでFormの値をjQueryを使って非同期にpostの値を渡してみました

まずViewでformをつくります

echo $this->Form->create('sample');
echo $this->Form->checkbox('test');
echo 
// などなど..
echo $this->Form->end();

formのsubmitイベントで、phpへpostします
jQueryのserializeをつかって、formの値をクエリ文字列にします
.serialize() | jQuery API Documentation

$('form').on('submit', function() {                                                               
    event.preventDefault();                                                                       
    event.stopPropagation();                                                                      

    $.ajax({                                                                                      
        type: 'POST',                                                                             
        url: '<?php echo $this->Html->Url(array('action'=>'save'));?>',                   
        data: { data: $(this).serialize() },                                                      
    }).done(function(data) {
        // 後処理                                                                      
    });                                                                                           
});     

コントローラーのsaveアクションへアクセス
これで
$this->data
にふつうのformのpostした値が入ってきます

public function save()
{
    $this->layout = null;
    parse_str($this->data);

    $ret = $this->SomeModel->saveAll($data);
    // などなど..
}

PHP: parse_str – Manual
で、クエリ文字列を変数に落とし込めばそのまま
$dataにまるごとデータが入ってきます
(jQueryでdata: で渡したので)

だいぶCakeらしくできた気がします

UbuntuでGmailを使ってメール送信してみる

Ubuntu 14.04でメール送信してみました
メールサーバーはGmailを使いました

postfixをインストール

$ sudo apt-get install postfix

postfix-install

postfix-install2

Gmailを使うために必要なものをいれます

$ sudo apt-get install sasl2-bin

postfixの設定をします

$ vim /etc/postfix/main.cf

relayhost = [smtp.gmail.com]:587
smtp_sasl_auth_enable = yes
smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd
smtp_sasl_security_options = noanonymous
smtp_sasl_tls_security_options = noanonymous
smtp_sasl_mechanism_filter = plain
smtp_use_tls = yes

を追記

smtp_sasl_password_maps
に設定したファイルを作ります

$ vim /etc/postfix/sasl_passwd

[smtp.gmail.com]:587 (あなたのアカウント)@gmail.com:(パスワード)

(あなたのアカウント)@gmail.com:(パスワード)
はお持ちのアカウントのものを

パスワード入りで危険なので権限をきつくします

$ sudo chown root:root /etc/postfix/sasl_passwd
$ sudo chmod 600 /etc/postfix/sasl_passwd

必要なdbファイルを生成

$ sudo postmap /etc/postfix/sasl_passwd

postfix 再起動

mailコマンドを使いたいので
$ sudo apt-get install mailutils

テスト

$ echo test | mail sample@sample.co.jp
(メールアドレスはご自身のものにしてください)

$ mailq

で、メールがたまってなければOKですがエラーが..

(SASL authentication failed; server smtp.gmail.com[173.194.72.108] said: 534-5.7.9 Application-specific password required. Learn more at?534 5.7.9 http://support.google.com/accounts/bin/answer.py?answer=185833 z4sm6903248pdg.94 - gsmtp)

2段階認証してたアカウントだからかはじかれてるみたいでした
アプリのパスワードの設定をすればいいみたいです

Googleアカウントへアクセス
アプリのパスワードをひとつ作ります

google-mail

できたパスワードを

google-app-password

$ vim /etc/postfix/sasl_passwd

に設定

メール送信テストを再度すると送ることが出来ました