2013年06月26日

Font Awesome 文字のアイコン

Font Awesomeとは


http://fortawesome.github.io/Font-Awesome/icons/
ここに表示されているアイコンを画像ではなく文字で表現が可能になるプラグイン?です。

環境


Rails 3.0.19

使用方法


http://fortawesome.github.io/Font-Awesome/
ここよりDownload
(とりあえずHomeに)解凍してcssとfontだけを抜き出します。

$ cd Rails.root/public/stylesheets/
$ mkdir font_awesome
$ cp -r ~/font-awesome/css Rails.root/public/stylesheets/font_awesome
$ cp -r ~/font-awesome/font Rails.root/public/stylesheets/font_awesome


cssを読み込みます。

$ vi app/view/hoge/index.html.erb

<%= stylesheet_link_tag './font_awesome/css/font-awesome.css' %>
<%= stylesheet_link_tag './font_awesome/css/font-awesome-ie7.css' %>


IE7でも正常に表示させたい場合は2段目のfont-awesome-ie7.cssが必要

タグの設置


$ vi app/view/hoge/index.html.erb

<i class="icon-zoom-in"></i>


これだけでアイコンが表示されます。
他にどんなclassでどんなアイコンが表示されるかは、サイトを御覧ください。


サイズ変更


cssでfont-size:25px;とすると、アイコンのサイズが変更されます。(アイコンは画像でなく文字)

色変更


文字なのでcssのcolorで色も自由自在

マウスオーバー



a.zoom {
color: #222222;
text-decoration: none;
}
a.zoom :hover {
font-size: 25px;
color: #222222;
text-decoration: none;
}

こんなかんじでマウスオーバーで拡大切替
posted by RicK at 12:14| Comment(0) | TrackBack(0) | 日記

2013年04月08日

JavaScript JSONPのajax非同期通信を同期通信として動作させる方法

JSONPのajax


JSONPはクロスサイトスクリプティング対策用として基本的にJSで使用されます。

環境


jQuery

概要


JSONPのajaxは非同期通信しかできません。
非同期通信は、画面Aから画面Bへ遷移する間に使用すると、
画面Bへの遷移が早すぎて通信が行われないことがあります。
そのため、このような状況では非同期通信は使用出来ませんが、
外部通信するためにはJSONPを使用したい、というジレンマからなんとか考えついた方法です。

対策


ajaxには通信処理が終了した後に処理を行うcompleteがあります。
このcompleteを遷移で使えばいいというのが対策です。
通常

aタグ -> jsによる外部通信 -> 画面B

という動きになりますが、

divタグ -> jsによる外部通信 -> -> completeによる画面遷移処理 -> 画面B

という動きになります。
具体的には下記ような形


$.ajax({
url: URL,
dataType: "jsonp",
data: data,
jsonpCallback: "callback",
async : true,
complete: function(u) {
return function() {
location.href = u;
};
}(url)
});



completeにあるurlはdivタグのnameとかに埋め込んでjsにて取得すればおkです。
これで何とか外部通信を完了させてから画面Bへ遷移するという同期通信のような動作ができます。
posted by RicK at 10:48| Comment(2) | TrackBack(0) | 日記

2013年03月21日

Postfix reject: RCPT disconnect

Postfix外部受信のメモ

環境


postfix 2.3.3

エラー内容



connect from unknown[X.X.X.X]
reject: RCPT from unknown[X.X.X.X]: 450 Client host rejected: cannot find your hostname, [X.X.X.X]; from= to=
disconnect from unknown[X.X.X.X]


解決策


mynetworksに
disconnect from unknown[X.X.X.X]
のIPを記載(範囲にするか固定にするかは自由)

# vi /etc/postfix/main.cf

mynetworks=xxx.xx.xx.xxx



posted by RicK at 11:25| Comment(0) | TrackBack(0) | 日記

2012年12月14日

Ruby on Rails Rails3 メール送信エラー ~ OpenSSL::SSL::SSLError: hostname does not match the server certificate ~

Rails3にてメールを送ろうとしたらエラーが出たのでその解決策

環境


Rails3.0.11

エラー内容



OpenSSL::SSL::SSLError: hostname does not match the server certificate


解決策



$ vim config/environments/production.rb

config.action_mailer.smtp_settings = { :enable_starttls_auto => false }


RailsがTLSという暗号化を行うためため、それを解除

ホストベース認証
posted by RicK at 17:07| Comment(0) | TrackBack(0) | 日記

2012年09月28日

Ruby on Rails Rails3 外部DB参照 ~別DB参照~

外部DB参照とは?


通常database.ymlに参照先DBを記載すると思いますが、
基本的にproductionで起動したならばproductionで設定した参照先しか見に行きません。
しかし、負荷軽減の関係でSlaveにSELECTだけはしたいときなどがあります。
そのときに、production以外の参照先を指定する事を外部DB参照といっています。

環境


Rails 3.0.1
Mysql

設定



$ cd RAILS_ROOT
$ vi config/database.yml # production_slaveを追加

production:
adapter:mysql2
...
host:192.168.1.1
...

production_slave:
adapter:mysql2
...
host:192.168.1.2
...

$ vi app/model/hoge.rb

def self.master_connection(conf)
establish_connection(conf.to_sym)
Rails.configuration.database_configuration[conf]
end



実行



$ cd RAILS_ROOT
$ bundle exec ruby c production

Hoge.find 1 # 192.168.1.1を参照
Hoge.master_connection("production_slave")
Hoge.find 2 # 192.168.1.2を参照

posted by RicK at 19:09| Comment(0) | TrackBack(0) | 日記

2012年08月30日

jQuery スマートフォン ブラウザバック後の動作

ブラウザバック後の動作とは?


jQuery1.8.1を使用しスマフォのページを作成しており、
作成ページはオートページャライズが付いているのですが、
iPhone4だけ作成したページから、遷移してブラウザバック後オートページャライズが動作しませんでした。

試行錯誤


「javascript ブラウザバック」などで調べたら色々でてきました。
そのだいたいはonloadやらonunloadをすると良いとのことでしたが、
そもそも、iPhone4だとリロード時はonloadとonunloadが動作するが、
aタグにて遷移の時は、動作しなかった。

対策1


色々探していたところ、
参考
このサイトにてsetTimeoutを使用して無理やり動作するというのがあった、
まず、aタグをonloadでファンクションに飛ばす。

<a href="http://hoge.com" onclick="javascript:Search.movePage();">hoge</a>

JSファイルにて

movePage: function() {
setTimeout(function() {
// onload時に走らせるイベントを指定
location.reload();
}, 100);
}

これは、aタグを押下するとタイマーが作動、遷移するとタイマーが停止し、
ブラウザバックで戻ってくると再度タイマーが起動しリロードが走ります。
一応できましたが、これだと遷移に時間がかかると遷移する前にリロードがかかってしまいます。

対策2


対策1の弱点を考慮したものが、参考
「onpageshow」です。
ここにあるように、ページが表示されたときに呼び出されます。
これを使用すると、ページが表示された時なので、aタグを押下していくら時間が過ぎようとも今いるページがリロード等されているわけではないので作動しません。
しかしブラウザバックしたときに、起動だけしていたonpageshowが再度ページが表示されることにより動作しreloadが走ります。

movePage: function(val) {
window.onpageshow = function() {
location.reload();
}
}

これで問題なしです。
ただ、このonpageshowは、チェックしたandroidでは動作しないようなので、
iphone5などバージョンが変わると動作するかは不明です。
(androidは対策しなくても動くので丁度よいのですが)
posted by RicK at 16:19| Comment(0) | TrackBack(0) | 日記

2012年07月24日

CentOS dfとdu 値が違うのはなぜ?

dfとduとは


dfとは、ディスク容量の表示。
duとは、ファイル容量を表示。

環境


CentOS 5.4

現象


dfで「/」が使用で80%近く容量を圧迫していたので、
不要なファイルを削除しようとファイルをduなので探していたが、
「/」以下(他パーティション除く)の結果が15G程度しかなかった。

原因


プロセスの動作中に使用しているファイルの削除を認め、
open状態のままOSがファイルを捕まえたままになることがあるようだ。

確認


本当に原因が起きているのかを確認しよう。
# ls -al /proc/*/fd/* | grep deleted

このコマンドを打って表示されたリストがそうである。
きっとそのファイルを見れば何に使用しているファイルかわかることでしょう。
きっと思い当たるフシがあるはず。(少なくとも自分にはありました)

解決方法


確認でみたファイルを使用しているアプリを再起動してください。

自分の場合、アプリを再起動したら使用容量が半分近くになりました。
ほとんど同じ事書いてありますが、こちらもどうぞ
posted by RicK at 16:01| Comment(0) | TrackBack(0) | 日記

2012年03月22日

Ruby on Rails Rails3 processing: パス is not recognized by the 'identify' command

processing: パス is not recognized by the 'identify'


画像をアップロードして表示しようとした時に発生したエラーです。

環境


ruby 1.9.3
rails 3.1.3
rmagick 2.13.1
ImageMagick 6.6.7-10

解決策


identifyのエラーで検索すると大抵は、enviroment.rbに
Paperclip.options[:command_path] = "C:/ImageMagick-6.6.2-Q16/"

こんな感じで追記しろとあったが、自分は解決しなかった。
しょうがないので、
そのエラーを吐き出している場所を探してみました。
$ vi Rails.root/vendor/bundler/ruby/1.9.1/gems/paperclip-2.4.5/lib/paperclip/geometry.rb

raise(NotIdentifiedByImageMagickError.new("#{file_path} is not recognized by the 'identify' command."))


18~30行目あたりのself.from_fileメソッドの上記コードで出力されているようです。
ここらへんでデバッグをしつつ、
identifyコマンドをフルパスで書いてみたりとやっていたところ
jpg形式はエラーにならずpng形式がエラーになっていた。
(PNGしか通さない仕様だったため気づかなかった)

ということは、単純にpingをサポートしてないだけじゃん?ということになり
・サポートできる拡張子を表示
$ convert -list format

やっぱりPNGが入っていなかった。
# yum -y install zlib
# yum -y install libjpeg-devel
ImageMagick再Install
# cd ??/ImageMagickxx/
# ./configure && make && make install
# convert -list format

これで解決
posted by RicK at 17:35| Comment(0) | TrackBack(0) | 日記

2012年01月24日

Ruby on Rails Rails3 NoMethodError: private method `readline'

NoMethodError: private method `readline'


rails2からrails3へバージョンアップしたときにでたエラーです。

環境


ruby1.9.3
rails3.0.7

状況


よくあるファイルのアップロードの箇所で起こったエラーです。
コントローラー側でparams[:file]といった具合にファイルを受け取って登録しようとしたら発生しました。(rails2では動いていて)

解決策


細かい説明は
Rails3 + fb_graphでFacebookに画像のアップロードをしてみる
こちらを参考にしていただき、結果としては
params[:file].tempfile.__getobj__

とすれば良い
posted by RicK at 11:48| Comment(0) | TrackBack(0) | 日記

2012年01月19日

Ruby on Rails ActionView::Template::Error (incompatible character encodings: ASCII-8BIT and UTF-8)

ActionView::Template::Error (incompatible character encodings: ASCII-8BIT and UTF-8)


rails2からrails3へVersionUpしたときに出たエラーです。

環境


ruby1.9.3
rails3.0.7
mysql5.0.77

状況


formでデータを入力するページで、
text_areaにデータを入力するのだが、
初期のデフォルトのデータとして、特定のhtmlファイルを読み込んでその内容をtext_area内に表示、
2度目以降はDBに登録されたデータをtext_area内に表示するという仕組みがある。

このページをrails2からrails3へVersionUpした後に遷移したら
ActionView::Template::Error (incompatible character encodings: ASCII-8BIT and UTF-8)

というエラーが発生した。

原因


ruby1.9から文字列にエンコーディングが設定されて、
それがデフォルトでASCII-8BITになるのだが、DB adapter(MySQL/Ruby)がエンコーディングを気にせずに、デフォルトのASCII-8BITのまま返してしまうのが原因らしい。

だが、ruby1.9は前から使っていたが発生していないが?
rails3もなにか関係しているんだろうな。

解決策


他のサイト等を見るとバッチあてるとあるが、
1箇所だけで他のところはなんにもないのであまり変えたくないなーと思ったので、
ASCII-8BITに変換されるならUTF-8に変換してしまうことにしました。

ruby1.9からStringに文字コード系のメソッドが追加されたようです。
Ruby1.9をこれから使う人のためのM17Nまとめ
上記の中の
String#force_encoding(encoding)

こいつを使って
@hoge.force_encoding("UTF-8")

これで完成。
このまま登録して、再度外してもエラーになったので、
表示のコードを変換したからといって登録されるデータが変わるでもないので、
とりあえずこれで問題なし。
posted by RicK at 10:41| Comment(0) | TrackBack(0) | 日記