ConoHa CentOSにgitlabを導入、そしてサブディレクトリ化

というわけでgitlabをCentOSに導入。


最終目標

1. gitlabを入れる
2. Apacheとnginxを同居(Apache -> nginx転送)
3. サブディレクトリにする。
4. SSL対応

というわけで実施。


まずは
http://d.hatena.ne.jp/toritori0318/20140523/1400863038

ここを見つつgitlabを通常インストール。


というか、ここのDownload > Centos6を見るだけでOKでした。
https://about.gitlab.com/downloads/

yum install openssh-server
yum install postfix
yum install cronie
service postfix start
chkconfig postfix on
lokkit -s http -s ssh
curl -O https://downloads-packages.s3.amazonaws.com/centos-6.6/gitlab-7.7.2_omnibus.5.4.2.ci-1.el6.x86_64.rpm
sudo rpm -i gitlab-7.7.2_omnibus.5.4.2.ci-1.el6.x86_64.rpm
gitlab-ctl reconfigure


これで目標1はクリア。

次にApache同居とSubdirectory化。



ここを参考に実施。
http://argmax.jp/index.php?gitlab%E3%82%92reverse%20proxy%E4%B8%8B%E3%81%A7%E5%8B%95%E3%81%8B%E3%81%97%E3%81%9F%E3%82%8Asubdirectory%E8%A8%AD%E5%AE%9A%E3%81%97%E3%81%9F%E3%82%8A

まずはgitlab.rbを編集

vim /etc/gitlab/gitlab.rb
external_url "http://xxxx.com" #自分のドメインを入力
external_port "8000"

一旦これを反映。

gitlab-ctl reconfigure

次に色々と置き換えていく

vim /var/opt/gitlab/gitlab-rails/etc/gitlab.yml
#relative_url_root: /gitlab
↓
relative_url_root: /gitlab
vim /var/opt/gitlab/gitlab-rails/etc/unicorn.rb

最終行に以下を追加

ENV['RAILS_RELATIVE_URL_ROOT'] = "/gitlab"
vim /var/opt/gitlab/gitlab-shell/config.yml
gitlab_url: "http://xxx.com" #恐らく自ドメイン値になっているはず。
↓
gitlab_url: "http://localhost:8080/gitlab"
vim /var/opt/gitlab/nginx/conf/gitlab-http.conf
server {
  listen *:8000;  #ポート情報を書き換え
 location ~ ^(assets)/  {
   root /opt/gitlab/embedded/service/gitlab-rails/public;
   gzip_static on; # to serve pre-gzipped version
   expires max;
   add_header Cache-Control public;
 }
↓ 全部コメントアウト(最後のほうにあります。)
 #location ~ ^(assets)/  {
 #  root /opt/gitlab/embedded/service/gitlab-rails/public;
 #  gzip_static on; # to serve pre-gzipped version
 #  expires max;
 #  add_header Cache-Control public;
 #}


これで完了。


あとはgitlabの再起動。

gitlab-ctl stop
gitlab-ctl start


以上。

ここまでで2と3はクリア。

念のため、

service httpd restart

Apacheが動くか(nginxと衝突してないか)を確認しましょう。



あとは4だけ。

ConoHaで始める新VPS生活

ABC2014Wでクーポンもらったので、
せっかくだしと始めてみた。


いいなと思ったところ

・ConoHaチャージが使える
数人とかで運用するにはいいかもしれない。


VPSの追加が簡単、気軽
さくらみたいに一個たてるごとに契約しなくていいのが楽。


・Webコンソールが優秀
しばらくさくらのやつは触ってないからなんともだけど、
普通に使える。
puTTy使わなくてもいいやん!
ってなった


・標準でWindowsがある
…まぁ、高いしつかわないけど、
選択肢にあるのはやっぱりつよいと思う。



とにかく、
仕事でAWSやNiftyCloudないしはSoftlayer使ってるひとには優しいUIだとおもう。
サーバも日割り計算してくれるし。


ただ、既にさくらに構築したVPSを移行まではしなくていいかな…




とりあえず、最小プランで開始。
gitlabでも入れてみようと思います。

Save to Server出来ずに困った。

久々にEclipseを使ってSalesforceの開発。

他の人の編集を自分のDeveloper環境にマージしようとした結果・・・



どんなにSave to Serverしてもうんともすんとも言わない!



どうしよう・・・と思ってやったこと



・新しいプロジェクト作ってローカルでコピー。
そしてSave to Server

  • > 結果変わらず。


・そういえばと思ってIDEのバージョンアップ

  • > 更新なし

あれ。でもよく見たらv28だぞうちのIDE・・・



というわけで最新バージョンを撮り直し。
使用してたeclipseは4.2 Juno。
Winter '14はJuno対応みたいなので、こっちのがいいでしょうという感じ。

    1. pluginsフォルダ内のcom.salesforce.*を全部削除
    2. eclipseを起動し、Force.comIDEがないことを確認。
    3. 「Help」->「Install New Software」
    4. http://media.developerforce.com/force-ide/eclipse42」を追加
    5. Force.com IDEをインストール!


これで試してみた。


まずは「ProjectをWinter'14 にUpdateしろよ」と言われた。
開発環境がWinter'14だからこれは正しい。
むしろ言われなかった時点で気づくべきだったと反省。





では早速、「Save to Server」っと・・・







でき・・・













なかったーorz





なんでやねん・・・
何かが悪いんだろうなぁ・・・


参考サイト
http://wiki.developerforce.com/page/Force.com_IDE_Installation

Salesforce REST APIを自作する

SalesforceREST APIを使用していて、
自作のクラスを使用したい場合。

@RestResource(urlMapping="/REST/*")
global class RESTAPIContainer{
    
    @HttpGet
    global static string getList(string name){
        ・・・
    }

    @HttpPost
    global static string add(string name, string type){
        ・・・
    }
}

これを作成した上で、

instanceUrl + "/services/apexrest/REST?name=aaa"

でアクセスするときちんと@HttpGetに対応したものを取得可能。


Jerseyやらexpress.jsを思い出すなぁ。
にしても簡単である。

JerseyでJSONPを返したい場合のTips

RESTfulなサーバを建てたいと思った時に使うのがJersey。

さて、RESTなだけで、やっぱりクロスドメインとか対応させないとね―。


ということでjsonp対応の方法。

@Path("/jsonget")
@GET
public JSONWithPadding getMethod(@Context HttpServletRequest request, 
        @QueryParam("callback") @DefaultValue("callback") String callback){
    
    //適当に返却する情報を生成
    Object resultObj = ・・・;
    
    //返却したいオブジェクトを元にJSONWithPaddingを生成
    return new JSONWithPadding(resultObj, callback);
}

これだけ。
これだけで、リクエストによってJSONJSONPか自動で判別してくれます。

なお、無理やりJSONPに固定したい場合には、

@Produces("application/javascript")

を指定してやると大丈夫みたいです。
(こうするとJSONPのJavascrptコードで固定されるらしい。)

WindowsでOS Xライクな生活を送るためのソフト

さて、MacBookAirを購入してはや半年。
既に、あの使いやすさに心を奪われております。


というわけで、WindowsでもあのMac OS Xライクな生活を送るためのソフトを紹介!

Dock

まずはDock。
http://simplelife.pya.jp/archives/4648

これだけはMac使いはじめる前から使ってるんだけど、
ただのランチャーとしても優秀だよね。これ。

MissionControl

あんまりフルスクリーンは使わないので、仮想デスクトップで代用。
http://dexpot.de/

一番気に入っているいいところは、マウスの戻る/進むでデスクトップの切替ができること。
アニメーションはないけど、要件は満たしているのでいいかな。と。

Expose

Logicoolが明らかにパクったようなシステムを提供していますが、
明らかに重たいので却下。

というわけでこれを使ってます。
http://insentient.net/



さぁ、君もこれでWindowsでもあのスムーズな動きを!
なお、私はLogicoolのT620というマウスを使っております。

MightyMouseっぽくて良い感じです。

まぁ、AirなのでTrackpadしか使ってないんですが・・・

C#でのファイル操作 - リンク編

Windowsのリンクといえば、「.lnk」というショートカットがあるファイルだけ。


だったはずだったんだ。


しかしそれも過去の話。

Vista以降には「シンボリックリンク」なる機能が実装され、
あたかもそこにそのファイル/フォルダがあるように見える。
とのこと。

そしてさらに「ジャンクション」なる機能も前々からあったらしい。



・・・はぁ。全部対応しないとアカンのね・・・


というわけでまとめ。

シンボリックリンクかどうかチェックする方法
http://troyparsons.com/blog/2012/03/symbolic-links-in-c-sharp/

次に、ジャンクションかどうかをチェックする方法
http://www.codeproject.com/script/Articles/ViewDownloads.aspx?aid=15633


これらを適宜にパクってやれば大丈夫。
それぞれの意味が分からなければググれば全部出てくるので安心だね。


まず、シンボリックリンクのターゲットを取得

string sLinkTarget = SymbolicLink.GetTarget(path);
if(sLinkTarget != null){
    //ここに入ればターゲットがある = シンボリックリンク
}else{
    //ここに入ればターゲットなしなので、
    //少なくともシンボリックリンクではない。
}

ちなみに、シンボリックリンクかどうかの確認であれば、

var attrs = System.IO.File.GetAttributes(dialog.FileName);
                    
if ((attrs & FileAttributes.ReparsePoint)
         == FileAttributes.ReparsePoint)
{
    //ここに入ればシンボリックリンク
}

だけでOKみたい。


次に、ジャンクションかの確認

try{|
    string jLinkTarget = JunctionPoint.GetTarget(path);
}catch{
    //こっちは、リンクじゃないとIOExceptionが投げられる
}


こんな感じで取得できる。
これでリンクかどうかの確認は可能みたいです。


なお、今までどおりの「.lnk」のリンクであれば、
まずは

Windows Script Host Object Model

を参照に追加。(参照の追加->COMの中にあります。)

その後、

IWshShell_Class shell = new IWshShell_Class();
IWshShortcut_Class shortcut;
shortcut = (IWshShortcut_Class)shell.CreateShortcut(path);

string targetPath = shortcut.TargetPath;

で取得できる。

ちなみに、ショートカットかどうかは拡張子みれば判別できるので、
判別自体はとっても簡単っすね。