ローカルファイルを更新したら、SFTPを利用して自動でファイルをサーバーにアップする。
ローカルファイルを更新したら、SFTPを利用して自動でファイルをサーバーにアップするgemを作りました。
pikonori/auto_sftp · GitHub
rsyncとかが使えない時に利用できるのではないかと思います。
Auto SFTPの導入
まず、Gemをインストールします。
$ gem install autosftp
Auto SFTPの初期設定
Gemをインストールしたらヘルプを確認してみましょう。
$ autosftp -h autosftp delete [remote name] # remove the configuration. autosftp help [COMMAND] # Describe available commands or one specific command autosftp init # Creating the initial file. file called '.autosftp' is created autosftp list # setting list autosftp set [remote name] # add information to the '.autosftp'. Please put the name of any [remote name] autosftp start [remote name] # Automatic monitoring start
まず、設定ファイルを準備します。
この設定ファイルは何処に配置してもいいですが、プロジェクト毎にサーバーが変わると思いますので、プロジェクトのディレクトリまで移動して、設定ファイルを準備します。
$ cd ~/workspase/project $ autosftp init
「autosftp init 」をコマンドで叩くとyaml形式で.autosftpというファイルが作成されます。
.autosftpはSSHの情報を登録するファイルになります。直接ファイルを操作しても問題ありません。
次に設定ファイルに接続先の情報を追加します。
接続先の情報はいくつでも登録可能です。
$ autosftp set [remote name]
[remote name]は自由な名称をつけて下さい。
対話型で入力を促されるので、それ通りに入力していきます。
$ autosftp set default [username@host:port] username@sample.com:22 #portが無しの場合は自動で22が入ります。 password: # 表には表示されません remote path: /remote/path # リモート先にアップするディレクトリを指定します。 # この時に一度認証を行い、接続できるか確認します。 local path: --If you enter a blank, the current directory is set /local/path # ローカルのディレクトリを指定します。からの場合はカレントディレクトリを登録します。
全てを入力すると、.autosftpにSSHの接続情報が書き込まれます。
--- default: :user: username :host: sample.com :port: 22 :password: password :remote_path: /remote/path :local_path: /local/path
コレで準備が完了します。
Auto SFTPの使い方
自動監視をスタートします。
$ autosftp start [remote name]
設定したsftpを削除します。
$ autosftp delete [remote name]
jqueryでのオブジェクト継承テンプレート
会社のJavascriptの神様から、Jqueryでのオブジェクト継承のテンプレートを教えてもらいました。
色々な所で活用できそうですので、メモ代わりに記事にしておきます。
最初の一行目と最後の行はおまじないみたいなものです><
親オブジェクト
(function($, window, document, undefined){ $.parent = function (option){ this.option = {} this._extends(option); this._init(); }; $.parent.prototype = { _extends:function(option){ if(option === undefined) { return; } for(var param in option){ this.option[param] = option[param]; } }, _init:function (){ }, }; })(jQuery, this, this.document);
継承後のオブジェクト
(function($, window, document, undefined){ $.child= function (option){ this.option = {} this._extends(option); this.init(); }; //定数 $.ModalConfirm.DEFINE = ""; $.child.prototype = new $.parent(); $.extend($.child.prototype,{ init: function() { this._init(); } })(jQuery, this, this.document);
呼び出し方
instance = new $.child();
以上!
rails使いがtwitter bootstrap用のwysiwygを速攻で導入
久々にwysiwygを導入することになって、色々探していたらgemで入れることが出来る、wysiwyg を発見しました。
そこまで高機能では無いですが、必要最低限の機能が揃っています。
また、gemで導入することが可能ですので、数分で対応が完了します。
以下に全て当てはまる人が導入するものだと思います。
導入
Gemfileに追加
以下の内容を追加します。
gem 'bootstrap-wysihtml5-rails'
常に最新が欲しい場合は
gem 'bootstrap-wysihtml5-rails', :require => 'bootstrap-wysihtml5-rails', :git => 'git://github.com/Nerian/bootstrap-wysihtml5-rails.git'
としましょう。
追加が完了したら、「bundle install」を行います。
js と cssを編集
bundle installが完了したら、必ずrailsを再起動して下さい。そうしないとjsとcssが上手く読み込まれません。
app/assets/stylesheets/application.cssを編集します。
*= require bootstrap-wysihtml5
app/assets/javascripts/application.jsを編集します。
//= require bootstrap-wysihtml5
wysihtml5を呼び出します。
$(document).ready(function() { return $("#comment").wysihtml5(); });
この時点である程度動作します。
日本語化
最後に日本語化です。
app/assets/javascripts/application.jsを編集します。
//= require bootstrap-wysihtml5 //= require bootstrap-wysihtml5/locales/ja-JP
wysihtml5を呼び出している箇所にオプションを渡します。
$(document).ready(function() { return $("#comment").wysihtml5({ locale: "ja-JP" }); });
コレで完了です。
cakephp と ruby on railsの比較
仕事ではcakephpを使用し、プライベートではruby on railsを使用しています。
アプリも幾つか作りましたし、比較的なものを書こうと思います。
比較1 導入編
まず導入ですが、圧倒的にcakephpが楽です。
もともとPHP自体がApacheにアップすれば勝手に動くシロモノですので、
ファイルアップ=稼働という形になります。
railsはunicornやthin等のhttpサーバー導入したり、色々しなければなりません。
また、プログラム反映も一度httpサーバーを再起動したりしなければなりません。
PHPに慣れすぎている人たちには、面倒くさいと思うでしょう。
比較2 開発編
開発は圧倒的にrailsだと思います。
最初のうちは戸惑うことも多いかもしれませんが、慣れてしまうとrailsの開発速度に敵うフレームワークは無いのではないか?と思ってしまいます。
1.コマンドからのプログラム自動生成が優秀
他のフレームワークにもありますが、railsがすごく優秀だと感じました。
2.migration機能が素晴らしい。
3.rails用のライブラリが優秀
ライブラリ等を使用したりするときに最低限のコードで動作することが可能です。
(ライブラリのコードを読むと黒魔術過ぎてわからない所が多いです。。。メタプログラミングが得意ですからねw)
cakephpが軽自動車だとしたらrailsは高級車って感じです。
高級車だけどブラックボックスが多いです。
結局のところクルマを運転する上で、中身なんぞ知らなくてもいいだろ?使う奴は運転する技術だけ習得してこいって考え方がrailsだと思います。オブジェクト指向の考え方に準拠しているって感じですね。
ファイルを編集したら自動で、リモートサーバーにファイルアップ
最近ブログの更新が滞っています。
新しいことをあまりやってないって事が原因でしょうが。。。
久々に新しいライブラリ?を作ったので紹介します。
pikonori/auto_sftp · GitHub
どのようなものかというと、ローカルのファイルを更新したら、自動でリモートサーバーにファイルをアップするライブラリです。
大抵の開発者はローカルで開発してローカルで動作確認を行うと思います。
しかし、うちの会社ではサーバーの設定が特殊なために、最終チェックはリモートサーバーにアップして確認します。
いつもはFTPクライアントで階層変えてアップして確認していたのですが、コレが非常に面倒くさい!
そこで、全て自動でファイルをアップできるようにしました。
(社内ではものすごく好評ですw)
FTPではなくSFTPにてアップします。
FTPの対応はしていません。
導入手順
1. 兎にも角にもbundler を入れます。
$ gem install bundler
2. pikonori/auto_sftp · GitHub からcloneしてきます。
DLでも大丈夫ですが、頻繁に更新する予定ですので、cloneしておいたほうが良いです。
落とす先は好きなところでOKです。
$ git clone https://github.com/pikonori/auto_sftp.git
3. sftp.yaml.defaultを編集します。
まずsftp.yaml.defaultをsftp.yamlにリネームします。
sftp.yamlの中身を確認すると、
sample: ip: localhost port: 22 user: admin password: password local_path: ~/ remote_path: /var/www/html/
となっていますので、リモートサーバーの設定等を行います。
以下が内容となります。
名称 | 内容 |
sample | 任意の名称です。コマンドを叩く際に指定します。 |
ip | リモート先のIPです。ドメインでも構いません。 |
port | ポートです。デフォルトは22になっています。 |
user | リモートサーバーのユーザー名です。 |
password | リモートサーバーのパスワードです。 |
local_path | 監視するローカルディレクトリです。ディレクトリ階層以下全てを監視します。 |
remote_path | リモートサーバーのパスです。 |
※ローカルパス以下のファイルが多すぎるとCPUを食いまくるので、ファイルが多い場合はディレクトリを絞って下さい。
複数設定する場合は、
sample: ip: localhost port: 22 user: admin password: password local_path: ~/ remote_path: /var/www/html/ sample2: ip: localhost port: 22 user: admin password: password local_path: ~/ remote_path: /var/www/html/
のように追加していきます。
4. 動作させます。
sftp.rb があるディレクトリに移動します。
移動後に以下のコマンドを叩きます
$ ruby sftp.rb -f sample C: create U: update D: delete E: error Name sample Host HostName Accepted 2013-10-09 09:49:17 +0900
上記のような文字列が出たら監視開始になります。
コレでファイルを修正するたびにファイルがアップされるようになります。
5. aliasを設定する。
ここからはMacやLinux専用になります。
(Windowsの方はbatとかを作成しておくと便利です。)
~/.bashrcを開きます。そこに
alias auto_sftp='ruby ~/sftp/sftp.rb'
の用な感じでaliasを設定しましょう。
これで
$ auto_sftp -f sample
で起動できるようになります。
まとめ
他にも機能がありますので、
$ auto_sftp -h
で確認してみて下さい。
将来的にgem installなどで簡単に導入できるように修正します。
(あと、テストケースも書かないとw
コードも汚いです。/(^o^)\)
導入できなかったり、動作不備がありましたら、気軽にコメントして下さい。