ポイントは2 hours agoのような時間のリンクをクリックすること。マウスオーバーしないとリンクのように見えないですが。。


参考:http://www.askdavetaylor.com/how_to_figure_out_individual_twitter_status_url_tweet_twhirl.html
ポイントは2 hours agoのような時間のリンクをクリックすること。マウスオーバーしないとリンクのように見えないですが。。


参考:http://www.askdavetaylor.com/how_to_figure_out_individual_twitter_status_url_tweet_twhirl.html
さくらVPSでWordpressブログをやってます。そんなにアクセスがないはずなのに、さくらVPSに移行した当時は結構サーバが落ちました。topコマンドで見るとスワップが結構70%まで上がったりして、手動でapache再起動とかもやりました。。ネットでいろいろググッてそれなりにパフォーマンスチューニングした結果やっと安定して、同じサーバに2つのWordpressブログと一つのRailsアプリケーションを実行しています。
参考までにさくらVPSは一番安いの512MB、月1000円のプランで、平日だとこのブログの一日PVは大体500〜600です。
チューニングしてから結構時間が経ったのでだいぶ忘れました。Evernoteでのメモを貼ります。
効果が高い順で。
W3 Total Cacheプラグインが一押しです。インストールも設定も簡単ですし、一番効果があります。 ページのキャッシュ、cssやjavascriptのマージと圧縮など、結構やってくれます。実際これだけ入れても感じるほど早くなるはずです。
httpd.confを編集します。いろいろ修正してみましたが、結果下記の設定にしました。この辺はググったら結構出ますが、それぞれの環境に合わせて試行錯誤したほうがオススメです。
<IfModule prefork.c>
StartServers 5
MinSpareServers 5
MaxSpareServers 10
ServerLimit 64
MaxClients 64
MaxRequestsPerChild 50
MaxMemFree 2000
</IfModule>
zlib.output_compression = On
pecl install APC
ActionView/Helpers/AssetTagHelper、asset(画像、CSSなど)ホストのチューニングについての勉強メモです。
image_tag(“rails.png”)のhelper methodで生成するリンクはデフォルトでは同じホストのpublicフォルダを指しています。それを変更したい場合はconfig/environments/production.rbのActionController::Base.asset_hostをいじります。
ActionController::Base.asset_host = "assets.example.com"
image_tag("rails.png")
# => <img alt="Rails" src="http://assets.example.com/images/rails.png?1230601161" />
ブラウザが一度に同一サーバには2つのコネクションしかできないそう(これは初めて知りました)で、asset同士のダウンロード完了するのを待たなければなりません。もし複数台のassetサーバがある場合はassets%d.example.comを使ってそれをコネクション数を増やせることができます。%dが指定されればRailsは0~3の4つの番号を付けて、並行して8つのコネクションができます。
ActionController::Base.asset_host = "assets%d.example.com"
image_tag("rails.png")
# => <img alt="Rails" src="http://assets.example.com/images/rails.png?1230601161" />
stylesheet_link_tag("application")
# => <link href="http://assets2.example.com/stylesheets/application.css?1232285206" media="screen" rel="stylesheet" type="text/css" />
もっと自分でカスタマイズしたい場合はsourceのprocパラメータを使えます。
ActionController::Base.asset_host = Proc.new { |source|
"http://assets#{Digest::MD5.hexdigest(source).to_i(16) % 2 + 1}.example.com"
}
image_tag("rails.png")
# => <img alt="Rails" src="http://assets1.example.com/images/rails.png?1230601161" />
stylesheet_link_tag("application")
# => <link href="http://assets2.example.com/stylesheets/application.css?1232285206" media="screen" rel="stylesheet" type="text/css" />
特定のパスで始まるassetを特定のホストに指定する例:
ActionController::Base.asset_host = Proc.new { |source|
if source.starts_with?('/images')
"http://images.example.com"
else
"http://assets.example.com"
end
}
image_tag("rails.png")
# => <img alt="Rails" src="http://images.example.com/images/rails.png?1230601161" />
stylesheet_link_tag("application")
# => <link href="http://assets.example.com/stylesheets/application.css?1232285206" media="screen" rel="stylesheet" type="text/css" />
さらにrequestの第二パラメータもあります。これでHTTPSの動作も制御できます。
ActionController::Base.asset_host = Proc.new { |source, request|
if request.ssl?
"#{request.protocol}#{request.host_with_port}"
else
"#{request.protocol}assets.example.com"
end
}
http://api.rubyonrails.org/classes/ActionView/Helpers/AssetTagHelper.html

自分のマウスがスクリーンのどこにあるかを知りたいときに役立つアプリです。 ホットキーを押せば大きい緑色の圓でマウスポインタを示しので、すぐに分かります。
さらに素晴らしいことはパソコンロック解除されたときに自動でアクティブになるんです!ユーザエクスペリエンス!
例えば省略可能なフラグみたいなローカル変数をpartial viewに渡した時、そのデフォルト動作をpartial viewでハンドリングしたいですね。
調べてみたらdefined?とlocal_assigns.has_key?が見つかりましたが、前者のほうはオススメできなさそうです。
Testing using defined? headline will not work. This is an implementation restriction. http://api.rubyonrails.org/classes/ActionView/Base.html
実際やってみて、defined?でも動けるパターンはありますが、if/unless文で一行にしたらバグりました。なのでやはり* local_assigns.has_key?*を使いましょう。
http://stackoverflow.com/questions/238615/defined-method-in-ruby-and-rails http://api.rubyonrails.org/classes/ActionView/Base.html
ゴールと言うか目標はrspecのrequest(integration) testでjavascriptのテストをしたいです。が、いろいろハマってその問題と解決策を時間軸でメモしておきます。
Capybaraについてはある程度知ってる前提です。
:js => trueでrspecのintegration testでjavascriptを有効に設定できます。
例:
ただデフォルトではjavascriptをサポートしないので、このspecは失敗します。解決の鍵はcapybara driverというものです。
Capybara … currently comes with Rack::Test and Selenium support built in.
By default, Capybara uses the :rack_test driver, which is fast but does not support JavaScript. You can set up a different default driver for your features.
The capybara-webkit driver is for true headless testing. It uses QtWebKit to start a rendering engine process. It can execute JavaScript as well. It is significantly faster than drivers like Selenium since it does not load an entire browser.
のようにcapybaraは Rack::TestとSeleniumのdriverがbuilt-inされて、デフォルトdriverは前者の:rack_testでjavascriptをサポートしないです。Seleniumはサポートしますが、それよりも速いのがcapybara-webkitなのでそれを採用しました。
Gemfileにcapybara_webkitを追記、bundle installします。webkitはQTが必要なので、もしそれがないとbundle installで失敗(エラー)します。後はspec_helper.rbにdefault driverをwebkitに設定します。
これで最初のサンプルspecは通るはずです。
上記のままだとデータベースと絡んだテストはまた失敗します。 例:
自分で確認してみたら、テスト時に作成したデータはjavascriptのテストで使えないっぽいです。Railscastsの記事によりますとspecのテストではデータベーストランザクションを使うが、それがselenium或いはwebkitでは使えないそうです。そのためにdatabase_cleanerというgemを使います。
config.use_transactional_fixturesをfalseにした時点でもうテスト自体は通るはずですが、データはずっとそのまま残ってしまうんです。database_cleanerは名の通りデータベースをテスト前後で綺麗な状態に保つことができます。
これでもう環境面の設定は完了です!
OmniauthでTwitterに認証ログイン後、ログイン前と同じページにリダイレクトしたい
libディレクトリのautoloadはRails libディレクトリのファイルをautoloadを参考してください。
redirect_toパラメータ或いはrefererをログイン直前のリクエストから取ってセッションに保存するRack middwareの手法です。そしてsessions_controllerではセッション内に保存されたurlにリダイレクトし、セッションクリアしています。
もちろんTwitter以外のproviderでの認証&ログイン処理にも対応できます。