April 12, 2015

vagrant reload --provisionで"Shared folders that Chef requires are missing on the virtual machine."エラー

メモです。

Vagrant 1.7.2で
$ vagrant reload --provision
しようとしたら
Shared folders that Chef requires are missing on the virtual machine.
This is usually due to configuration changing after already booting the
machine. The fix is to run a `vagrant reload` so that the proper shared
folders will be prepared and mounted on the VM.
とエラーが出てしまったので、調べてみると
http://stackoverflow.com/questions/27975541/vagrant-chef-error-in-provision-shared-folders-that-chef-requires-are-missin
が見つかりました。

書いてある通りに
$ rm .vagrant/machines/default/virtualbox/synced_folders
して、再度実行したらうまくいきました。

January 17, 2015

Laravelのクエリスコープをテストするメモ

以下の"Query Scopes"をいかに簡単にテストするか考えてみました。
http://laravel.com/docs/4.2/eloquent#query-scopes

Laravel5を使っていますが、Laravel4でも考え方は同じなはずです。

Illuminate\Database\Eloquent\Model を継承した Fooクラス が、以下のクエリスコープを持っているとします。
public function scopeBar(Builder $q, $baz)
{
    return $q->whereHas('qux', function ($q) use ($baz) {
        $q->where('quxx', $baz);
    });
}
とりあえず、このクエリスコープが組み立てるSQLを、バインドされるパラメータ含めて確認できれば良かったので、以下の方法でやってみました。

1.
storage/database.sqlite を作成。コネクションエラーを回避したいだけなので、空ファイルでOKです。

2.
config/database.php を編集。
'default' => env('DB_DRIVER', 'mysql'),
3.
phpunit.xml に追記。
<env name="DB_DRIVER" value="sqlite"/>
4.
テスト。
public function testScopeBar()
{
    $q = (new Foo())->bar(100);
    $sql = $q->toSql();
    $bindings = $q->getBindings();

    dd($sql, $bindings); // これをテストする
}
より良い方法があれば教えて下さい。

December 23, 2014

OpenShiftのJenkinsでGitLabのソースを取得する

BitbucketとGitLabが異なるだけで、方法は全く以下の通りなのですが、自分メモとして書き残しておきます。(大変参考にさせて頂きました。)
http://www.techscore.com/blog/2013/10/15/openshift-online-jenkins-bitbucket/

要点は、OpenShiftの~/.ssh/はパーミッション上、書き込み不可なので、代わりにGIT_SSHを使う。となります。

1.
~/app-root/data/.ssh/jenkins_id_rsa.pub をGitLabに登録する
* もちろん、新しく作成してもOKです。

2.
~/app-root/data/.ssh/jenkins_id_rsa のパーミッションを600にする

3.
~/app-root/data/.ssh/gitssh.sh を作成する
#!/bin/sh
ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -i $OPENSHIFT_DATA_DIR/.ssh/jenkins_id_rsa "$@"
4)
~/app-root/data/.ssh/gitssh.sh に実行権限を与える

5)
Manage Jenkins > Configure System > Environment variables に以下の設定をする
name: GIT_SSH
value: 作成したgitssh.shのパス

6)
Jenkinsでビルド実行してソースが取得できればOKです。取得できなければどこかが間違っています。

OpenShiftのJenkins ServerにCapistrano 3をインストールする

OpenShiftのJenkins Serverはrubyのバージョンが1.8.7で、Capistrano 3をインストールしようとしたらエラーになりました。

簡単な方法は無いかなーと考えてみたんですが、とりあえず以下の方法でインストール出来ました。

適当な場所にbundleをコピーして、実行するrubyを変更します。
> mkdir ~/app-root/data/bin
> cp /usr/bin/bundle ~/app-root/data/bin/
vim等で ~/app-root/data/bin/bundle の先頭の行を以下に変更します。
#!/usr/bin/ruby193-ruby
適当な場所にGemfileを作ります。
source 'https://rubygems.org'

gem 'capistrano', '~> 3.3.0'
インストールと初期化がうまく行けばOKだと思います。
> ~/app-root/data/bin/bundle install
> ~/app-root/data/bin/bundle exec cap install

OpenShiftでJenkins Serverのビルドが"Waiting for next available executor"で進まない

メモです。

タイトルのとおりなんですが

Manage Jenkins > Manage Nodes > master(の設定) > "# of executors" を 1 に(0だった)

したら、進んだ。。。