よく「歴史を書き換える」と言われている作業です
特に今回はコミットログとコミットしたユーザ情報を書き換える方法をご紹介します
違うマシンからpushすると.git/configとかを設定するのを忘れて変なユーザでコミットすることがたまにあるのでメモしておきます
git rebase -i HEAD~3
3の部分はHEADからどらくらいまで遡るかを指定します
3つ前のpushまで書き換えたい場合は3を指定します
エディタが立ち上がるので歴史を書き換えたい行をpick -> editをする
:wqで保存
editとした部分で止まるのでコミッター情報を書き換える
git commit --amend --author="username <email@address.com>"
エディタの起動とともにコミットログを書き換える画面が表示されるのでコミットログを書き換える
このとき全く書き換えないとpushすることができないっぽいので、ちょっとでもいいので変更すること
git push -f
コミットが完了したらpushする、このとき「-f」をつけてローカルの変更を無理矢理メインストリームにpushする
Github上のコミットログで確認するとログとコミッタ情報が書き換えられていると思います
git rebase --continue
rebase作業を続けます
他にもeditを指定している場合は同じように修正してcommit -> pushします
すべてのeditが終了すれば完了です
以上です
「-f」でローカルの情報を強制的にpushするのでローカルの情報はpullして最新の状態にしてから実施することをおすすめします
2014年4月30日水曜日
2014年4月29日火曜日
Jenkinsでビルドが失敗したらGmailに通知する方法
■環境
■設定手順
Windows7 64bit
Jenkins 1.560
Jenkins 1.560
■設定手順
1. SMTPメールサーバ(Gmail)の設定
2. ジョブ側の設定
以上で設定は完了です
これでジョブが失敗するとメールが通知されるようになります
通知が来ない場合はGmailの設定やACL(Gmailへのoutgoingなど)の設定を確認してみてください
通知機能はメールの他にもSNSやIMに対してもできるようです
また、プラグインで「Configuration Slicing Plugin」というプラグインがありこれをインストールするとメールを通知する設定を全部のジョブを一度に設定することができます
Jenkinsの管理 -> システムの設定 -> E-mail 通知 の設定項目を開きます
「高度な設定」ボタンをクリックしSMTP認証に必要な情報を設定します

「高度な設定」ボタンをクリックしSMTP認証に必要な情報を設定します
- SMTPサーバー・・・smtp.gmail.com
- SMTP認証・・・チェックON
- ユーザ名・・・Gmailにログインするアカウント名
- パスワード・・・上記アカウント名のパスワード
- SSL・・・チェックON
- SMTPポート・・・465

2. ジョブ側の設定
既存のジョブでも新規のジョブでも問題ありません
ジョブの設定画面から「ビルド後の処理の追加」でE-mail通知を選択します
これはジョブが失敗した場合にメール通知するための設定でここにメールアドレスを設定します
メールアドレスはカンマ区切りで複数設定することも可能です
「不安定ビルドも逐一メールを送信」は必須ではないので適宜変更してください

ジョブの設定画面から「ビルド後の処理の追加」でE-mail通知を選択します
これはジョブが失敗した場合にメール通知するための設定でここにメールアドレスを設定します
メールアドレスはカンマ区切りで複数設定することも可能です
「不安定ビルドも逐一メールを送信」は必須ではないので適宜変更してください

以上で設定は完了です
これでジョブが失敗するとメールが通知されるようになります
通知が来ない場合はGmailの設定やACL(Gmailへのoutgoingなど)の設定を確認してみてください
通知機能はメールの他にもSNSやIMに対してもできるようです
また、プラグインで「Configuration Slicing Plugin」というプラグインがありこれをインストールするとメールを通知する設定を全部のジョブを一度に設定することができます
2014年4月28日月曜日
CentOS6.3でrailsのサンプルアプリを動かしてみた
■環境
■インストール
■サンプルアプリ作成
■DBサーバ設定と接続テスト
■Tips
■参考サイト
P.S 20140508
CentOS release 6.3 (Final) 64bit
ruby 2.1.1p76
gem 2.2.2
rails 4.1.0
sqlite 3.6.20
ruby 2.1.1p76
gem 2.2.2
rails 4.1.0
sqlite 3.6.20
■インストール
yum -y groupinstall "Development Tools"
yum -y install zlib zlib-devel openssl openssl-devel sqlite-devel
wget http://cache.ruby-lang.org/pub/ruby/2.1/ruby-2.1.1.tar.gz
tar zvxf ruby-2.1.1.tar.gz
cd ruby-2.1.1
./configure
make
make install
gem update
gem install rails --no-rdoc --no-ri
gem install execjs --no-rdoc --no-ri
gem install therubyracer --no-rdoc --no-ri
cd /var/tmp
rails new "rails-test"
cd rails-test
echo 'gem "therubyracer"' >> Gemfile
rake db:create
rails server
http://localhost:3000 にブラウザでアクセスしてrailsのサンプルが表示されることを確認する
yum -y install zlib zlib-devel openssl openssl-devel sqlite-devel
wget http://cache.ruby-lang.org/pub/ruby/2.1/ruby-2.1.1.tar.gz
tar zvxf ruby-2.1.1.tar.gz
cd ruby-2.1.1
./configure
make
make install
gem update
gem install rails --no-rdoc --no-ri
gem install execjs --no-rdoc --no-ri
gem install therubyracer --no-rdoc --no-ri
cd /var/tmp
rails new "rails-test"
cd rails-test
echo 'gem "therubyracer"' >> Gemfile
rake db:create
rails server
http://localhost:3000 にブラウザでアクセスしてrailsのサンプルが表示されることを確認する
■サンプルアプリ作成
cd /var/tmp/rails-test
rails generate controller test-app
vim config/routes.rb
touch app/views/test_app/bye.html.erb
touch app/views/test_app/hello.html.erb
vim app/views/test_app/hello.html.erb
vim app/controllers/test_app_controller.rb
rails server
http://localhost:3000/hello にアクセスするとテンプレートのファイルを表示
http://localhost:3000/bye にアクセスすると文字列を表示
rails generate controller test-app
create app/controllers/test_app_controller.rb invoke erb create app/views/test_app invoke test_unit create test/controllers/test_app_controller_test.rb invoke helper create app/helpers/test_app_helper.rb invoke test_unit create test/helpers/test_app_helper_test.rb invoke assets invoke coffee create app/assets/javascripts/test_app.js.coffee invoke scss create app/assets/stylesheets/test_app.css.scss
vim config/routes.rb
Rails.application.routes.draw do get 'hello' => 'test_app#hello' get 'bye' => 'test_app#bye' end
touch app/views/test_app/bye.html.erb
touch app/views/test_app/hello.html.erb
vim app/views/test_app/hello.html.erb
<h1>Hello</h1> This page is created by template file. <%= @msg %>
vim app/controllers/test_app_controller.rb
#coding: utf-8
class TestAppController < ApplicationController
def hello
@msg = 'hello'
end
def bye
render :text => 'bye'
end
end
rails server
http://localhost:3000/hello にアクセスするとテンプレートのファイルを表示
http://localhost:3000/bye にアクセスすると文字列を表示
■DBサーバ設定と接続テスト
rails generate model test_app
vim db/migrate/20140425074927_create_test_apps.rb
うまくmigrateできない場合、スキーマを変更する場合は「rake db:migrate:reset」でDBを再作成できます
id, created_at, updated_at カラムは自動で生成されるようです
vim db/seeds.rb
この操作でseeds.rbに記載したレコードをinsertしてくれます
マスターデータ等事前に登録しておかなければいけないデータを記載します
rails dbconsole
select * from test_apps;
sqlite3を使ってDBの中を見ることができます、上記SQLでデータが存在することを確認する
sqlite3自信はファイルDBなので実データはrails上で管理しているファイルを参照しています
vim app/controllers/test_app_controller.rb
vim app/views/test_app/hello.html.erb
rails server
httpd://localhost:3000/hello
にアクセスするとDB内の情報が表示されることを確認します
vim db/migrate/20140425074927_create_test_apps.rb
class CreateTestApps < ActiveRecord::Migration
def change
create_table :test_apps do |t|
t.string :name
t.timestamps
end
end
end
rake db:migrate うまくmigrateできない場合、スキーマを変更する場合は「rake db:migrate:reset」でDBを再作成できます
id, created_at, updated_at カラムは自動で生成されるようです
vim db/seeds.rb
TestApp.create(:name => 'test1')rake db:seed
この操作でseeds.rbに記載したレコードをinsertしてくれます
マスターデータ等事前に登録しておかなければいけないデータを記載します
rails dbconsole
select * from test_apps;
sqlite3を使ってDBの中を見ることができます、上記SQLでデータが存在することを確認する
sqlite3自信はファイルDBなので実データはrails上で管理しているファイルを参照しています
vim app/controllers/test_app_controller.rb
#coding: utf-8
class TestAppController < ApplicationController
def hello
@msg = 'hello'
@test_app_all_record = TestApp.all
end
def bye
render :text => 'bye'
end
end
モデル名.all とするとDB内にあるデータをすべて取得することができますvim app/views/test_app/hello.html.erb
<h1>Hello</h1>
This page is created by template file.
<%= @msg %>
<br>
<br>
<table border="1">
<tr>
<td>id</td>
<td>name</td>
<td>created_at</td>
<td>updated_at</td>
</tr>
<% @test_app_all_record.each do |test_app| %>
<tr>
<td><%= test_app.id %></td>
<td><%= test_app.name %></td>
<td><%= test_app.created_at %></td>
<td><%= test_app.updated_at %></td>
</tr>
<% end %>
</table>
controller内で取得したDBのオブジェクトをeachで回して全レコードを表示してあげますrails server
httpd://localhost:3000/hello
にアクセスするとDB内の情報が表示されることを確認します
■Tips
ExecJS::RuntimeUnavailable: Could not find a JavaScript runtime
は
gem install therubyracer --no-rdoc --no-ri
して
echo 'gem "therubyracer"' >> Gemfile
すれば解消する
rubyのインストールにchefのオムニバスインストールをするとgemのバージョンが古くてうまく動作しません
sqlite3でテーブルのスキーマを確認する方法は「select * from sqlite_master;」 or 「.schema table_name」
は
gem install therubyracer --no-rdoc --no-ri
して
echo 'gem "therubyracer"' >> Gemfile
すれば解消する
rubyのインストールにchefのオムニバスインストールをするとgemのバージョンが古くてうまく動作しません
sqlite3でテーブルのスキーマを確認する方法は「select * from sqlite_master;」 or 「.schema table_name」
■参考サイト
P.S 20140508
insertやdeleteできるサンプルを含んだサンプルのソースコードをGithubで公開しました
https://github.com/kakakikikeke/ruby-rails-sample-app
https://github.com/kakakikikeke/ruby-rails-sample-app
2014年4月27日日曜日
PHPでTwitterのOAuth認証をやってみた
■環境
■事前作業
■TwitterOAuthモジュールインストールおよび設定
■動作確認
これで作成したTwitterアプリのkeyの有効性のチェックやOAuthできるかのチェックは簡単にできるようになりそうです
今回ソースコードは既存のものを利用しました
同じようにアプリでOAuth認証を実装したい場合はindex.phpの内容を真似れば大丈夫です
OAuth自体の流れを詳しく知りたい場合にはtwitteroauth/twitteroauth.phpの中を確認すればわかります
CentOS release 6.3 (Final)
PHP 5.3.3
PHP 5.3.3
■事前作業
yum -y install php php-devel git
TwitterDeveloperのサイトでアプリを作成し「API key」と「API secret」を取得しておく
TwitterDeveloperのサイトでアプリを作成し「API key」と「API secret」を取得しておく
■TwitterOAuthモジュールインストールおよび設定
cd /var/www/html
git clone https://github.com/abraham/twitteroauth.git
cd twitteroauth
mv config-sample.php config.php
vim config.php
OAUTH_CALLBACKのhostnameの部分はOAuth認証後に戻ってくるURLを指定するのでグローバルからアクセスできるhostnameを指定してください
service httpd start
git clone https://github.com/abraham/twitteroauth.git
cd twitteroauth
mv config-sample.php config.php
vim config.php
define('CONSUMER_KEY', 'API key');
define('CONSUMER_SECRET', 'API secret');
define('OAUTH_CALLBACK', 'http://hostname/twitteroauth/callback.php');
API key と API secretは先ほど取得したアプリのキーを入力してくださいOAUTH_CALLBACKのhostnameの部分はOAuth認証後に戻ってくるURLを指定するのでグローバルからアクセスできるhostnameを指定してください
service httpd start
■動作確認
http://hostname/twitteroauth/connect.php
あとは「Sign in with Twitter」をクリックするとtwitterのID/PWの認証が求められるので認証します
認証後はログインしたユーザの情報がvar_dump形式で表示されます
ログアウトしたい場合はサンプル右上の「clearing your session.」をクリックすればOKです
あとは「Sign in with Twitter」をクリックするとtwitterのID/PWの認証が求められるので認証します
認証後はログインしたユーザの情報がvar_dump形式で表示されます
ログアウトしたい場合はサンプル右上の「clearing your session.」をクリックすればOKです
これで作成したTwitterアプリのkeyの有効性のチェックやOAuthできるかのチェックは簡単にできるようになりそうです
今回ソースコードは既存のものを利用しました
同じようにアプリでOAuth認証を実装したい場合はindex.phpの内容を真似れば大丈夫です
OAuth自体の流れを詳しく知りたい場合にはtwitteroauth/twitteroauth.phpの中を確認すればわかります
2014年4月26日土曜日
gitでsubmoduleする方法
- submoduleを管理するリポジトリを作成
- 作成したリポジトリをclone
- git submodule add https://github.com/kakakikikeke/cookbooks-emacs.git
- git add cookbooks-emacs
- git commit -m "add submodule"
- git push -u origin master
- サブモジュール側のgitが更新されたら「git submodule update」
上記はすべてGithub上で実施しました
とりあえずsubmoduleの登録の仕方だけメモ
■参考サイト
2014年4月25日金曜日
CentOS6.5にGoogleDriveをマウントしてみた
まずはじめにですが、この操作はGUI環境がないとできません
CentOSにGUI環境を構築する手順はこちらを参照ください
また以下の作業はX環境が整っていること以外、真っさらな環境で作業した場合の手順となります
■環境
■ocamlインストール
■opamインストール
■google-drive-ocamlfuseのインストール
■GoogleDriveのマウント
■Tips
■参考サイト
CentOSにGUI環境を構築する手順はこちらを参照ください
また以下の作業はX環境が整っていること以外、真っさらな環境で作業した場合の手順となります
■環境
CentOS release 6.5 (Final)
X Windows System
firefox 24.0
ocaml 4.01.0
opam 1.1.1
X Windows System
firefox 24.0
ocaml 4.01.0
opam 1.1.1
■ocamlインストール
yum -y groupinstall "Development Tools"
yum -y install git m4 fuse fuse-devel libcurl-devel libsqlite3x-devel zlib-devel libcurl sqlite-devel firefox
wget http://caml.inria.fr/pub/distrib/ocaml-4.01/ocaml-4.01.0.tar.gz
tar zvxf ocaml-4.01.0.tar.gz
cd ocaml-4.01.0
vim configure
prefix=/usr/local -> prefix=/usr
./configure
make world.opt
make install
yum -y install git m4 fuse fuse-devel libcurl-devel libsqlite3x-devel zlib-devel libcurl sqlite-devel firefox
wget http://caml.inria.fr/pub/distrib/ocaml-4.01/ocaml-4.01.0.tar.gz
tar zvxf ocaml-4.01.0.tar.gz
cd ocaml-4.01.0
vim configure
prefix=/usr/local -> prefix=/usr
./configure
make world.opt
make install
[root@localhost ocaml-4.01.0]# ocaml -version The OCaml toplevel, version 4.01.0
■opamインストール
git clone https://github.com/OCamlPro/opam.git
cd opam
./configure
make
make install
opam init
opam update
cd opam
./configure
make
make install
opam init
opam update
[root@localhost ~]# opam --version 1.1.1
■google-drive-ocamlfuseのインストール
opam install google-drive-ocamlfuse
Yを選択してインストールする
内部的には.configure -> make -> make install の流れ
vim ~/.bashrc
google-drive-ocamlfuse
ここでGUI上にfirefoxが立ち上がります
なのでCUI環境しかない場合は事前にvncserver等でGUI環境を立ちあげておいてください
GoogleDriveをマウントするアカウント情報を入力します
アクセストークンを取得する時間に制限があるのでコマンド実行したら早めに認証を開始します

認証が完了するとgoogle-drive-ocamlfuseアプリからアクセスを許可する画面になると思いますので
「承認する」をクリックします

再度アプリのアクアスを許可するかどうか聞かれるので「Allow」をクリックします

最後のAllowをクリックした段階でCUI側のアクセストークンが渡ります
CUI側に「アクセストークンが取得できないよ」みたいなエラーが出ている場合は再度「google-drive-ocamlfuse」を実行してfirefox上で認証してください
Yを選択してインストールする
内部的には.configure -> make -> make install の流れ
vim ~/.bashrc
PATH=$PATH:$HOME/.opam/system/bin export PATHsource ~/.bashrc
google-drive-ocamlfuse
ここでGUI上にfirefoxが立ち上がります
なのでCUI環境しかない場合は事前にvncserver等でGUI環境を立ちあげておいてください
GoogleDriveをマウントするアカウント情報を入力します
アクセストークンを取得する時間に制限があるのでコマンド実行したら早めに認証を開始します

認証が完了するとgoogle-drive-ocamlfuseアプリからアクセスを許可する画面になると思いますので
「承認する」をクリックします

再度アプリのアクアスを許可するかどうか聞かれるので「Allow」をクリックします

最後のAllowをクリックした段階でCUI側のアクセストークンが渡ります
CUI側に「アクセストークンが取得できないよ」みたいなエラーが出ている場合は再度「google-drive-ocamlfuse」を実行してfirefox上で認証してください
■GoogleDriveのマウント
mkdir /googledrive
google-drive-ocamlfuse /googledrive/
mount | grep google
となっていればOKです
あとは/googledriveにアクセスしてGoogleDrive上のファイルが存在することを確認してください
google-drive-ocamlfuse /googledrive/
mount | grep google
google-drive-ocamlfuse on /googledrive type fuse.google-drive-ocamlfuse (rw,nosuid,nodev)
となっていればOKです
あとは/googledriveにアクセスしてGoogleDrive上のファイルが存在することを確認してください
■Tips
・アンマウント
・アクセストークンが取得できていない場合
・動作がかなり重い
・GUI環境がないと動作しなのが辛い
・GoogleAcountでアプリの権限を確認する
umount /googledrive
・アクセストークンが取得できていない場合
マウント後にdf等を実行して
df: `/googledrive': デバイスもしくはリソースがビジー状態です
と出る場合はgoogle-drive-ocamlfuseがうまくアクセストークンを取得できていません
google-drive-ocamlfuse /googledrive/のコマンドを実行した段階で再度GUI側にfirefoxが立ち上がるアクセス要求を確認する画面が立ち上がっていると思いますので「承認」をクリックします
df: `/googledrive': デバイスもしくはリソースがビジー状態です
と出る場合はgoogle-drive-ocamlfuseがうまくアクセストークンを取得できていません
google-drive-ocamlfuse /googledrive/のコマンドを実行した段階で再度GUI側にfirefoxが立ち上がるアクセス要求を確認する画面が立ち上がっていると思いますので「承認」をクリックします
・動作がかなり重い
マウントしたフォルダに対するアクセスが異様に重い場合があります
おそらくコマンドを発行するごとに必要な情報をGoogleDrive側に取得しに行っているためかと思います
df で容量を確認するときやlsでディレクトリ内の情報を確認するときに重くなる場合はおそらくネットワークが影響していると思います
おそらくコマンドを発行するごとに必要な情報をGoogleDrive側に取得しに行っているためかと思います
df で容量を確認するときやlsでディレクトリ内の情報を確認するときに重くなる場合はおそらくネットワークが影響していると思います
・GUI環境がないと動作しなのが辛い
アクセストークンの期限が切れた場合は再マウントする必要があるのですが、その場合は再度アプリからのアクセスを承認する必要があるので
その場合はvnc等のGUI環境が動作している必要があります
どのくらいの頻度で承認を求められるかわかりませんが、GUI上に移動して毎回承認するのは結構辛いなと感じました
その場合はvnc等のGUI環境が動作している必要があります
どのくらいの頻度で承認を求められるかわかりませんが、GUI上に移動して毎回承認するのは結構辛いなと感じました
・GoogleAcountでアプリの権限を確認する
https://security.google.com/settings/security/permissions?pli=1
上記のページにログインすると今回承認したgoogle-drive-ocamlfuseがアクセス許可されていることがわかると思います
google-drive-ocamlfuseを使用しなくなった場合は念のためこのページからアクセス許可を削除したほうがいいと思います
上記のページにログインすると今回承認したgoogle-drive-ocamlfuseがアクセス許可されていることがわかると思います
google-drive-ocamlfuseを使用しなくなった場合は念のためこのページからアクセス許可を削除したほうがいいと思います
■参考サイト
2014年4月23日水曜日
CentOS6.3にVNCをインストールしてGUI環境を構築する方法
■環境
■インストール作業
■vcnserver実行
■Tips
■参考サイト
CentOS release 6.3 (Final) 64bit
-> yum updateして6.5になります
tigervnc-server-1.1.0-8.el6_5
-> yum updateして6.5になります
tigervnc-server-1.1.0-8.el6_5
■インストール作業
yum -y groupinstall "X Window System" "GNOME Desktop Environment" "Desktop"
yum -y install libXfont xorg-x11-xinit xorg-x11-fonts-Type1
yum -y install tigervnc tigervnc-server
export DISPLAY="localhost.localdomain:1"
yum -y update
なぜこの段階でyum updateしているのかというとどうやらCentOS6.3のデフォルトのドライバだとうまくXが起動しませんでした
以下のようなエラーが「X -configure」や「startx」時に出ていました
open /dev/dri/card0: No such file or directory
startx &
この段階でX Windows Systemが起動できるか確認します
上記のコマンドで起動して「pgrep X」でプロセス番号が表示されれば起動できています
とりあえず起動を確認したらkillしておきます
vncserverを立ち上げる段階でもvncserverが自動でXを立ちあげてくれますがそもそもXの起動がうまくいかないとvncもうまく起動しないのでXの確認をしておきます
yum -y install libXfont xorg-x11-xinit xorg-x11-fonts-Type1
yum -y install tigervnc tigervnc-server
export DISPLAY="localhost.localdomain:1"
yum -y update
なぜこの段階でyum updateしているのかというとどうやらCentOS6.3のデフォルトのドライバだとうまくXが起動しませんでした
以下のようなエラーが「X -configure」や「startx」時に出ていました
open /dev/dri/card0: No such file or directory
startx &
この段階でX Windows Systemが起動できるか確認します
上記のコマンドで起動して「pgrep X」でプロセス番号が表示されれば起動できています
とりあえず起動を確認したらkillしておきます
vncserverを立ち上げる段階でもvncserverが自動でXを立ちあげてくれますがそもそもXの起動がうまくいかないとvncもうまく起動しないのでXの確認をしておきます
■vcnserver実行
vncserver
初回実行時はパスワードを設定します
vncviewerを使って「IPアドレス:5901」にアクセスします

パスワードを聞かれるので設定したパスワードを入力します
通信が暗号化されていないよーという警告が表示されますが無視します
以下のように接続できてエクスプローラ等が表示、操作できれば問題ないです

初回実行時はパスワードを設定します
vncviewerを使って「IPアドレス:5901」にアクセスします

パスワードを聞かれるので設定したパスワードを入力します
通信が暗号化されていないよーという警告が表示されますが無視します
以下のように接続できてエクスプローラ等が表示、操作できれば問題ないです

■Tips
・vnc-server停止方法
vncserver -kill :1
vncserver -kill :1
■参考サイト
登録:
投稿 (Atom)