2013-12-30

railsプラグインをrubygemsに登録してみた

このエントリーをブックマークに追加 このエントリーを含むはてなブックマーク
railsのgemプラグインを作ってみたのでrubygemsに登録をしてみたいと思います。

作ったrailsプラグインに関しては、
http://kingyo-bachi.blogspot.jp/2013/12/rails.html
を見ていただけたらと思います。

rubygemsに登録するためには、rubygemsにアカウントを作成する必要があります。
https://rubygems.org/sign_up
からサインアップしてアカウントを作ります。

アカウントを作成するとAPI Keyが払い出されます。
これを
~/.gem/credentials
に保存するとrubygemsに登録ができるようになります。

API Keyは
https://rubygems.org/profile/edit
にあります。
またこのページには~/.gem/credentialsを作成するコマンドが書いてあるので、それをコピーして実行します。
パスワードが聞かれるので、パスワードを入力すると~/.gem/credentialsが作成されます。

これで登録する準備はOKです。

実際に登録する手順は、
登録するrailsプラグインのディレクトリに移動して
rake release
で登録されちゃいます。

以下の登録されちゃいました。
https://rubygems.org/gems/rails_acclog2db



以下が参考になりました。
http://blog.kyanny.me/entry/2012/02/20/015129

railsのプラグインを作ってみた

このエントリーをブックマークに追加 このエントリーを含むはてなブックマーク
railsのプラグインを作ってみました。

実際に作った手順を簡単に記録しておこうと思います。

作ったのは、railsのアクセスログをdbに保存するというものです。
after_filterでlogsテーブルに記録をするというだけのものです。

とりあえず名前はrails_acclog2dbとします。
githubに実際に作ったものを置いてみました。
https://github.com/vivahiraj/rails_acclog2db


まずは雛形を作ります。

rails plugin new rails_acclog2db -T --skip-bundle --dummy-path=spec/dummy

それぞれのオプションは
-T:テスト用ファイルの作成をスキップ(後でrspecを利用するようにします)
--skip-bundle:コマンド直後にbundle installを実行しない
--dummy-path:作ったプラグインを試すためのrails環境の場所を指定

cd rails_acclog2db


続いてrspecの設定を行います。

vi rails_acclog2db.gemspec


rspec-railsとammeterを追加します。
ammeterはgeneratorのspecを作成する際に利用します。

関連するgemをvendor配下にインストールするように設定します。(必須ではないです)

mkdir .bundle
vi .bundle/config

内容は以下のような感じです。
------------------------------
BUNDLE_PATH: vendor/bundle
BUNDLE_DISABLE_SHARED_GEMS: "1"
------------------------------

gemをインストールします。

bundle install

rspec用のファイルを生成します。

cd spec/dummy
ln -s ../../spec
rails generate rspec:install
cd -
cp spec/dummy/.rspec .

spec_helperを修正します。

vi spec/spec_helper.rb




environmentの読込先を変更してammeter/initを追加します。


今回はログの記録先としてlogsテーブルに保存したいので、migrationとmodelをrails generateで実行できるようにするために専用のgeneratorを作成してみます。

まずはgeneratorでコピーするファイルを保存するディレクトリを作成します。
mkdir -p lib/generators/rails_acclog2db/install/templates

コピーするモデルを作成します。

vi lib/generators/rails_acclog2db/install/templates/log.rb

コピーするマイグレーションを作成します。

vi lib/generators/rails_acclog2db/install/templates/create_logs.rb

ジェネレーターを作成します。

vi lib/generators/rails_acclog2db/install/install_generator.rb

だいたいこんな感じがお決まりのようです。

ジェネレータのspecも作成してみます。

mkdir -p spec/generators/rails_acclog2db/install

vi spec/generators/rails_acclog2db/install/install_generator_spec.rb

specが成功することを確認してみます。
bundle exec rspec spec


実際にジェネレートできるかテスト用のrails環境で試してみます。
cd spec/dummy/
rails g rails_acclog2db:install

実際にmigrationもできるか試します。
rake db:migrate
rake db:migrate RAILS_ENV=test

cd ../../

作成されたLogモデルのspecも作ってみます。

mkdir spec/models
vi spec/models/log_spec.rb
specが成功することを確認してみます。
bundle exec rspec spec


つづいてメインの部分でlogを記録する部分です。
controllerにaccess_loggingと書いたら、そのcontrollerへのログを記録するようにしてみます。
sessionに:userが設定されていたら、きっと何かしらの認証がされたと思い込んで、それっぽい情報を保存するようにもします。

vi lib/rails_acclog2db/logging.rb

ActiveSupport::Concernをextendするとモジュールで取り込まれるclassメソッドとかインスタンスメソッドがちょっとすっきりかけるようです。

上記のファイルをrequireできるようにします。

vi lib/rails_acclog2db.rb 



実際にテスト用のrails環境のcontrollerに組み込んでみてspecを作成してみます。

まずはcontrollerを準備します。

cd spec/dummy
rails g controller welcome
touch app/views/welcome/index.html.erb

vi app/controllers/welcome_controller.rb



vi config/routes.rb



次にspecを作成します。
cd ../../

vi spec/controllers/welcome_controller_spec.rb

specが成功することを確認してみます。
bundle exec rspec spec


これが普通な作り方なのかはよくわからないのですが、こんな感じでできました。


以下が参考になりました。
http://guides.rubyonrails.org/v3.2.14/plugins.html
http://d.hatena.ne.jp/kouji0625/20130523/p1
http://d.hatena.ne.jp/kouji0625/20130524/p1

2013-12-28

gitの供用リポジトリの作り方

このエントリーをブックマークに追加 このエントリーを含むはてなブックマーク
gitの共用リポジトリの作り方です。

用件としては、
・commitする人には認証をしてもらいたい
・でも認証なしでread onlyで使えるようにしたい
という感じのものです。

方法としては、commitはssh経由で行うようにしてread onlyはgitプロトコルでgit daemonで提供する感じになります。

環境はCentOS6です。

rootで実行します。

・git commitできるユーザが所属するgroupを追加
addgroup gitrepo

・commitできるユーザの登録
commitする人のアカウントを事前に作っておく必要があります。
そして上記のグループに追加します。
以下はユーザvivahirajにgit commitを許可する例です。
usermod -a -G gitrepo vivahiraj

・gitリポジトリ格納用ディレクトリを作成
mkdir /var/git

・公開用の認証なしでの利用ができるようにgitデーモンのインストール
yum -y install git-daemon

・gitデーモンの設定
vi /etc/xinetd.d/git
disableとserver_argsを変更します。
server_argsのほうでは、専用のリポジトリの指定したプロジェクトのみが公開されるようにするために--export-allと--user-pathをはずしました。
---------------------------------------------
#disable = yes
disable = no
#server_args = --base-path=/var/lib/git --export-all --user-path=public_git --syslog --inetd --verbose
server_args = --base-path=/var/git --syslog --inetd --verbose
---------------------------------------------

・xinetdの自動起動設定と再起動
chkconfig xinetd on
service xinetd restart

以上で器はできました。



で個別プロジェクトのリポジトリの作成方法は以下のとおりです。
以下ではsampleというプロジェクトを作っているものとします。

・プロジェクト用の供用リポジトリの作成
cd /var/git
mkdir sample.git
cd sample.git
git --bare init --shared
cd ..
chgrp -R gitrepo sample.git
認証なしで公開する場合は以下も実行
touch sample.git/git-daemon-export-ok



で、実際にクライアント側からソースの初期登録を行う例です。
別途クライアント側から実行するものとします。 
初期データとしてsampleディレクトリに登録するものがある場合です。
リポジトリがあるサーバをgit.server.comとします。

・初期登録
cd sample
git init
git add .
git commit -m "first commit"
git remote add origin ssh://git.server.com/var/git/sample.git
git push origin master



ついでなので、リポジトリからソースを取得して変更するときの例です。

・取得と変更
git clone ssh://git.server.com/var/git/sample.git sample
cd sample
適当に変更
git add .
git commit -m "change test"
git push origin master

ちなみにgitプロトコルで公開設定したリポジトリにgemを登録しておけば、
bundler利用の場合だったら以下のように指定することでgemインストールすることができます。

gem 'sample', :git => 'git://git.server.com/sample.git'






2013-12-25

WindowsでrubyをいじっていてSSLエラーがどうのこうの言われた場合の対処

このエントリーをブックマークに追加 このエントリーを含むはてなブックマーク
Windows環境でrubyを利用していて

SSL_connect returned=1 errno=0 state=SSLv3 read server certificate B: certificate verify failed

みたなエラーが出た場合の対処です。

http://curl.haxx.se/ca/cacert.pem
をダウンロードして
c:\ruby
みたいな適当なところに保存しておきます。

そして、環境変数SSL_CERT_FILEを設定します。

Windows7の場合だったら
コントロールパネルから
システムとセキュリティ-システム-システムの詳細設定を選び
環境変数をクリックします。
そして、システム環境変数の新規をクリックして
変数名:SSL_CERT_FILE
変数値:C:\ruby\cacert.pem
としてOKとします。

これでOKです。

以下が参考になりました。
http://stackoverflow.com/questions/5720484/how-to-solve-certificate-verify-failed-on-windows

2013-12-24

rubyでGoogle Calendarをいじる

このエントリーをブックマークに追加 このエントリーを含むはてなブックマーク
rubyでgoogleカレンダーをいじってみました。

コマンドラインからgoogleカレンダーをいじります。

google-api-clientを利用します。
なので
gem install google-api-client -v 0.6.4
gem install jwt -v 0.1.5
でインストールしておきます。
(※ここで記載している内容は0.6.4でないと動きません。またjwtも0.1.5より新しいのが入っていると動きません)

まずはGoogle Developers Consoleにプロジェクトを登録します。
登録したら「APIs & auth」の「APIs」で
Calendar API
を「ON」にします。

そして「APIs & auth」の「Credentials」でOAuth用のCLIENT IDを発行します。
「CREATE NEW CLIENT ID」でApplication typeを「Installed application」、Installed application typeを「Other」としてCLIENT IDを作成して、作成されたCLIENT IDとCLIENT SECRETを控えます。
(※ここいら辺も変更されていますが、似たような設定はできる感じです)

google-api-clientをインストールしたらgoogle-apiをいうコマンドが利用できるようになっているので、これを利用して一度OAuth認証を行います。
以下のような感じです。CLIENT_IDとCLIENT_SECRETは控えたもので置き換えてください。

google-api oauth-2-login --scope=https://www.googleapis.com/auth/calendar --client-id=CLIENT_ID --client-secret=CLIENT_SECRET

コマンドを実行するとwindows環境であればブラウザが開いてOAuthの許可を求められるので許可します。認証が完了するとホームディレクトリ(Windows7の場合は、C:\Users\mynameみたいなところの下)に.google-api.yamlが作成されるので、今回作成するプログラムを置く場所に移動しておきます。

このyamlファイルにOAuthでの認証情報が保存されているようなので、この情報を利用します。
でgoogleカレンダーをいじるrubyスクリプトは以下のような感じです。
カレンダー一覧から「仕事用」カレンダーを選び、今日から31日に以内のイベントをすべて削除して、イベントを二つ追加しています。


以下を参考にさせていただきました。
http://blogaomu.com/2012/09/16/ruby-script-using-google-calendar-api

2013-12-18

remiリポジトリからyumでインストールしたmysql5.5を5.6にyum updateする

このエントリーをブックマークに追加 このエントリーを含むはてなブックマーク
yumは依存関係をいい感じで解決してくれるので便利ですね。

ただmysqlとかはバージョンが古めのものがインストールされちゃう傾向があります。

なのでちょっと前まではmysqlの新しいバージョンを利用するためにremiリポジトリを使ったりしていました。
でもこちらも5.6には対応していないようです。

と思っていたらmysql公式のリポジトリができていたようです。
こちらを追加するとremiでインストールした5.5のmysqlを5.6にアップデートできます。

手順は以下のような感じです。

・rootになる
rootで作業します。
su -

・バックアップの作成
設定ファイルとデータベースを念のためバックアップします。
cp /etc/my.cnf .
mysqldump -u root --all-databases > mysql_dump

・mysql公式のリポジトリを追加
CentOS6では以下のような感じで追加します。
yum install -y http://repo.mysql.com/mysql-community-release-el6-5.noarch.rpm

CentOS5の場合は
http://dev.mysql.com/downloads/repo/
から以下のrpmをダウンロードします。
mysql-community-release-el5-5.noarch.rpm
インストールの前にmysqlレポジトリ用のgpgキーというものが必要になります。
http://dev.mysql.com/doc/refman/5.5/en//checking-gpg-signature.html
に記載されている
-----BEGIN PGP PUBLIC KEY BLOCK-----
から
-----END PGP PUBLIC KEY BLOCK-----
までの内容をmysql-gpg.txtみたいなファイル名のテキストファイルに保存して
rpm --import mysql-gpg.txt
とすることでキーの登録ができます。
その上でrpmでインストールします。
yum install -y mysql-community-release-el5-5.noarch.rpm

これ以降は、CentOS5でもCentOS6でも変わりません。

・mysql停止
mysqlをとめます。
service mysqld stop

・mysqlのアップデート
mysqlをアップデートします。
yum -y update mysql-server mysql-devel

・mysql起動
mysqlを起動します。起動に失敗する場合は/var/log/mysql.logなどのlogファイルを確認します。
mysql5.6になって利用できなくなった設定を/etc/my.cnfに書いていると起動に失敗したりします。
service mysqld start

・既存DBのアップデート
既存DBに更新処理をかけます。
mysql_upgrade


これで、もともとは入っていた
mysql-libs-5.5.31-1.el6.remi.x86_64
mysql-server-5.5.31-1.el6.remi.x86_64
mysql-devel-5.5.31-1.el6.remi.x86_64
mysql-5.5.31-1.el6.remi.x86_64
みたいなものが以下のように更新されました。
mysql-community-common-5.6.15-1.el6.x86_64
mysql-community-server-5.6.15-1.el6.x86_64
mysql-community-release-el6-5.noarch
mysql-community-client-5.6.15-1.el6.x86_64
mysql-community-libs-5.6.15-1.el6.x86_64
mysql-community-devel-5.6.15-1.el6.x86_64


参考にさせていただいたサイトは以下です。
http://d.hatena.ne.jp/akishin999/20131029/1383050569


2013-12-12

人が乗れるロボット「クラタス」がamazonで売っているらしい

このエントリーをブックマークに追加 このエントリーを含むはてなブックマーク

人が乗ってパイロット気分が味わえるロボットのような、なんというかという感じの「クラタス」がamazonで売っていたので何かの間違いでこのページ経由で買ってくれる人が現れることを期待してリンクを張ってみました。

2013-12-11

A6サイズのAndroidタブレットって存在しないのですね

このエントリーをブックマークに追加 このエントリーを含むはてなブックマーク
ふとA6ノートと同じサイズのタブレットをいい感じのケースに入れて使うと良いような気がする・・・
と思ってA6サイズのタブレットを探してみたのですが、どうもないようです。

A6サイズ タブレット

で検索するとWACOMの違うタブレットばかりひっかかります。

WACOMでないものでもアップルのA6プロセッサーがひっかかったりして肝心な情報はありませんでした。

一番近いサイズがGaraxy Noteの初代のものが近い感じでしたが、幅が細い感じです。

A6サイズのタブレットって使いづらいのですかねぇ。

2013-12-09

ActiveRecordでjoinしたテーブルのカラムでwhere条件を指定するとき

このエントリーをブックマークに追加 このエントリーを含むはてなブックマーク
ActiveRecordで他のテーブルをjoinしたときに、joinした側のテーブルにあるカラムを条件として使いたいときに、以下のようにしていました。

Order.joins(:user).where("users.name='viva'")

で、最近以下のようにも書けるということを知りました。

Order.joins(:user).merge(User.where(:name=>'viva')

以下が参考になりました。
http://api.rubyonrails.org/classes/ActiveRecord/SpawnMethods.html#method-i-merge
http://qiita.com/ryog/items/1899df6bfee8176b6c7c

どっちもタイプする長さはあんまり変わらなかったので、そのときの気分で当面はどっちを使うか決めようかと思います。


      
      

2013-12-02

Raspberry PiとUSBハブにモバイルバッテリから給電しようと思ったけどあきらめた

このエントリーをブックマークに追加 このエントリーを含むはてなブックマーク
Raspberry PiにいろいろUSBでくっつけるとなるとセルフパワーのUSBハブが必要になってきます。

それでも、いつでもどこでも利用できたらよいなぁと思いモバイルバッテリからRaspberry PiとUSBハブに給電できたら便利かもと思ってみました。

こんな感じです。

結論からいうとモバイルバッテリからUSBハブに給電する方法がわからなかったのであきらめました。

モバイルバッテリからUSBハブに給電するケーブルを自作した方はいました。
http://zigsow.jp/portal/own_item_detail/225839/


ちなみに2ポートあるモバイルバッテリはありました。



で他の方法とかを調べてみたらUSBハブからRaspberry Piに給電とUSB接続両方をさせることができることがわかりました。
http://shokai.org/blog/archives/7865

この方法ならばUSBハブ用にコンセントを一つしか使わないのでこれはこれでよいことを知ったと思ってみました。

どうしても外で使いたいならば、USBハブのコンセントを以下のようなポータブル電源につなぐというのもありかな?