Facebookページ・アプリでハマるところシリーズ。
RailsでFacebookアプリ作ります。FacebookアプリはIFRAME内のページをPOSTメソッドで呼び出します。エントリー一覧(/entries)のようなものをFacebookアプリのトップページにしようとしたらアレ?となります。(POSTしたらcreate呼ばれるから)
オーマイゴッド!じゃあ/entries/newをPOSTメソッドも受け入れるようにしてこれをトップにしよう。しかしFacebookアプリは/で終わるURLしか指定できません。仕方ないので/entries/new/を受け入れるようにしよう・・・。
しかしログインしたはずが情報が引き継がれません。おかしいな。
WARNING: Can't verify CSRF token authenticity
ログを見るとCSRF tokenのWARNING。考えてみりゃ当然ですが、FacebookからPOSTで呼ばれる時にはCSRF tokenなんぞ付いてないのでWARNINGが出ます。そして危ないのでsessionは一旦破棄されるわけです。自動ログアウト。
paperclipを使ってて「縦長の画像をアップしたら横長になる」という問題。
これはpaperclipが悪いんじゃなくて、元のファイルもMacのPreviewで見ると縦長なんだけど、ブラウザで見ると横長。MacのPreview他、ExifのOrientationタグに対応したソフトで見ると縦長に見える。
Webアプリ的にはちょっと困る。「縦長の画像をアップしたら横長になった!」と言われても見てるツールの違いで最初から横長なんだから。
imagemagickのconvertにはExifのOrientationタグの内容に合わせて画像データを回転させてくれる超便利な-outo-orientオプションがあるのでそれを使えばいい。
paperclipはrmagickを使わず、convertコマンドを呼び出すだけで、好きなオプションが渡せるというイカシタ作りになっているのでこんな感じでOK。
class User < ActiveRecord::Base
has_attached_file :picture, convert_options: {all: '-auto-orient'}
end
allは複数のstyleが合った場合に全部にこのオプションを付けるという指定。originalも残るから安心。
phpでアップロードサイズね。はいはい、upload_max_filesize、ワロスワロスとかいってっとやべーぞ!
nginxのclient_max_body_sizeとphp.iniのupload_max_filesize, post_max_sizeを変える必要がある。
それぞれデフォルトは1MB, 2MB, 8MBになってっからデカイ画像とかアップできない。
# nginx
client_max_body_size 32M;
; php.ini
post_max_size = 32M
upload_max_filesize = 32Msudo するときに sbin にパスを設定する方法 | Carpe Diem
僕はDebian派です。CentOSは嫌い・・・というかCentOSが俺のこと嫌いなんじゃないかと思っていた原因の一つがコレ。
オフィスにn0tsさんが来てたので、せっかくなので日ごろ気になってたアレコレを聞いてみたらスッキリした解決方法を教えてくれました。
「visudoは構文チェック機能のために存在する」こととか。
久しぶりにWindowsのパソコンを入手したので入れたソフト。リビング用なので仕事にはほとんど使わないです。
-
CapsLockをCtrlに変更。名前的には逆な気がするが・・・。
Essential Codec Pack(Media Player Classic Homecinema)
Media Player Classicはメンテが数年されてなくてHomecinemaってのがforkしたヤツっぽい。それが含まれてるCodec Pack。
-
リビング用なので。
-
ニコニコ動がプレイヤー。やっぱりこういうのはWindowsの方が充実してる。
-
Twitterクライアント。ちょっと重め?
アンチウィルスソフト
# config/initializers/omniauth.rb
Rails.application.config.middleware.use OmniAuth::Builder do
if Rails.env.production?
provider :twitter, 'xxxxxxxxxxx', 'xxxxxxxxxxxxxxxxxxxx'
else
provider :twitter, 'ooooooooooo', 'oooooooooooooooooooo'
end
end今まで通りだと動きません。test/test_helper.rbに下記を追加。
require 'shoulda/rails'
今βのshoulda 3.xなら大丈夫なのでもうすぐこれも必要無くなるみたいです。
Windows7アップグレード版とXP通常版(SP無し)、Vista通常版をもってるのでOS無しにしたんですが、一瞬詰んだかと思いました。
Windows7のアップグレード版をDVDブートした場合は何かしらのWindowsがHDDに入ってないと「プロダクトキーが間違っています。」と出る。(このエラーメッセージは不親切だと思う)
このLm-AS411EはWindows7しかサポートしないと書いてありますが、ホントにWindows XPはインストールできず何度もブートするし、Vistaはドライバーがなくてインストールできない。
(ハードもソフトも製品版をちゃんと買っているのに詰んだか・・・?)
と焦りましたが、アップグレード版をクリーンインストールする方法は有名らしく、こちらを参考にして解決しました。
Windows7アップグレード版からクリーンインストールする方法-GIZAZINE(ギザジン)
「何だよコンチクショウ!」
rails3.1でMySQLからやってくる文字列がASCII-8BITになっているのでto_jsonすると壊れる(to_jsonがencodingを見て処理するので)。sqlite3では起こらない。
環境はSnow Leopard、ruby1.9.2-p290、homebrewで入れたmysql 5.1.54。
% rails new foo
% cd foo
% vi Gemfile
(...)
gem 'mysql'
(...)
% bundle
% vi config/database.yml
(...)
development:
adapter: mysql
encoding: utf8
database: foo_development
pool: 5
username: root
password:
host: localhost
socket: /tmp/mysql.sock
(...)
% rails g model post title:string
% rake db:create
% rake db:migrate
% vi db/seeds.rb
Post.create!(title: 'うんk')
% rake db:seed
% rails c
ruby-1.9.2-p290 :001 > puts Post.first.title
うんk
=> nil
ruby-1.9.2-p290 :002 > Post.first.title.encoding
=> #<encoding:ascii-8bit>
ruby-1.9.2-p290 :003 > puts Post.first.title.to_json
"\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd"
=> nil
CentOS 5.6でも同じ。
解決:
mysql gemはruby1.9.1からのencodingに対応してない。だからmysql2を使えば解決でした。
% vi Gemfile
(...)
gem 'mysql2'
(...)
% vi config/database.yml
(...)
adapter: mysql2
(...)
% rails c
ruby-1.9.2-p290 :001 > Post.first.title.encoding
=> #<Encoding:UTF-8>
adapterにmysql2と書けるというところが盲点でした・・・。

