コンテンツ制作者がリンクからデジタルコンテンツを販売できるGumroadがおもしろい
おもしろWebサービスの紹介。
デジタルコンテンツ(やろうと思えばリアルな商品も可能)の作り手が簡単にコンテンツを販売できてしまうWebサービス。
制作者はほとんどコンテンツをWebにアップロードするだけ。あとは生成されたリンクを広めれば良い。ユーザーがリンクをクリックするとクレジットカード決済可能なページに遷移。そこで購入したいと思ったらカード番号を入力して決済すれば、コンテンツをダウンロードできる。手数料は5%。
間にGumload以外介在せず、審査もないのでコンテンツ制作者にはある意味革命的なシステムなんじゃないでしょうか。普通なら、技術的にはできるけどセキュリティ面が。。と思いとどまるところをやってしまったところがすごいです。まだまだ問題はあると思いますがこれからの発展性に期待。
使い心地が気持ち良さそうなタスク管理アプリ「Clear」
定番のタスク管理機能を斬新なUIでリメイクしたアプリっぽいです。
使ってて気持ち良いってことが他との差別化につながる好例。
OmniAuthの設定方法が若干変更されてました
gemがプロバイダ毎に別れた為、個別にGemfileに設定する必要があります。
/Gemfile(twitterとFacebookの場合。追記後、$ bundle install 実行)
gem 'omniauth-twitter' gem 'omniauth-facebook'
/config/initializers/omniauth.rb(今までと同じ)
Rails.application.config.middleware.use OmniAuth::Builder do provider :twitter, 'TWITTER_KEY', 'TWITTER_SECRET' provider :facebook, 'FACEBOOK_ID', 'FACEBOOK_SECRET' end
SessionsControllerの作成
$ rails g controller sessions
/app/controller/sessions_controller.rb
class SessionsController < ApplicationController def create user = User.from_omniauth(env["omniauth.auth"]) session[:user_id] = user.id redirect_to root_url, notice: "Signed in!" end def destroy session[:user_id] = nil redirect_to root_url, notice: "Signed out!" end def failure redirect_to root_url, alert: "Authentication failed." end end
ルーティングの設定
/config/routes.rb
root :to => "home#index" match "/auth/:provider/callback" => "sessions#create" match "/auth/:provider/failure" => "sessions#failure" match "/signout" => "sessions#destroy", :as => :signout
Userモデルの作成
$ rails g model user
マイグレーションファイルの修正→migrate
class CreateUsers < ActiveRecord::Migration def self.up create_table :users do |t| t.string :provider, :null => false t.string :uid, :null => false t.string :name, :null => false t.string :screen_name, :null => false t.timestamps end end def self.down drop_table :users end end
$ rake db:migrate
/app/models/user.rb
class User < ActiveRecord::Base def self.from_omniauth(auth) find_by_provider_and_uid(auth["provider"], auth["uid"]) || create_with_omniauth(auth) end def self.create_with_omniauth(auth) create! do |user| user.provider = auth["provider"] user.uid = auth["uid"] user.name = auth["info"]["name"] user.screen_name = auth["info"]["nickname"] end end end
テスト用
app/application_controller.rb
class ApplicationController < ActionController::Base protect_from_forgery helper_method :current_user private def current_user @current_user ||= User.find(session[:user_id]) if session[:user_id] end end
/app/views/home/index.html.erb
<% if current_user %> Welcome <%= current_user.name %>! <br /> <%= link_to "Sign Out", signout_path %> <% else %> <%= link_to "Sign in with Facebook", "/auth/facebook" %><br /> <%= link_to "Sign in with Twitter", "/auth/twitter" %> <% end %>
パブリックキーがないとしかられた時の対処
git push heroku master で“Permission denied (public key)”と言われたら下記のコマンドでherokuにパブリックキーを登録し直す。
heroku keys:add <path-to-your-public-key> 【入力例】 heroku keys:add ~/.ssh/id_rsa.pub
エラーメッセージの日本語化
Rails 2.3.5でかなりはまった日本語化だが、Rails3だとずいぶん簡単。一応メモっておく。
config/application.rbに以下の行を追加。
config.i18n.default_locale = :ja
下記のURLからja.ymlをダウンロードしてconfig/locales/以下に置く。
https://github.com/svenfuchs/rails-i18n/blob/master/rails/locale/ja.yml
以上でOK。
モデル追加などでカスタマイズしたい場合は、
以下のようにja.ymlのactiverecordの後に追記すればOK。
attributes: topic: title: "タイトル" description: "内容" url: "参考URL"