deviseでsign in/sign up/sign outへのリンク

昨日に続いて、devise の話。sign in/sign up/sign out それぞれへのリンクをつけた。こんな感じ。

<ul>
  <li style="list-style-type: none;">
    <ul>
<% if user_signed_in? %>
    </ul>
  </li>
</ul>
<ul>
  <li style="list-style-type: none;">
    <ul>
      <li><%= link_to "Sign out", destroy_user_session_path, :method => :delete %></li>
    </ul>
  </li>
</ul>
<% else %>
      <ul>
        <li style="list-style-type: none;">
      <ul>
      <li><%= link_to "Sign in", new_user_session_path %></li>
      <li><%= link_to "Sign up", new_user_registration_path %></li>
    </ul>
  </li>
</ul>
<% end %>

サインインしているときは、Sign out だけ、していないときは Sign in と Sign up へのリンクを表示する。

Railsアプリにdeviseでユーザー認証を

先日から作り始めた Web アプリに、ユーザー認証を付けたい。ググってみると、devise っていうのがいいみたいなので、それを使うことにした。参考にしたのは以下のページ。

 cf. Railsでログイン、ユーザー登録機能を簡単に実装できる devise がスゴすぎると話題 – lough-raku^^
 cf. Rails4 にて Devise でユーザー登録・ログイン認証・認可の機能を追加 – EasyRamble
 cf. DeviseでSign up時にメール確認する – 悪あがきプログラマー

まずはインストール

Gemfile に以下の行を追加。

gem 'devise'

そいでもってインストール。

takatoh@nightschool:~/w/lathercraft$ bundle install

ジェネレータでモデルを作成

takatoh@nightschool:~/w/lathercraft$ bundle exec rails generate devise:install
takatoh@nightschool:~/w/lathercraft$ bundle exec rails generate devise User

モデル名は User にした。この時点で次のようなマイグレーションファイルができる。今回はユーザー名を入れたかったので name フィールドを追加、加えて Email での確認をしたかったので、confirmable のところがコメントアウトしてあったのを外した。

class DeviseCreateUsers < ActiveRecord::Migration
  def change
    create_table(:users) do |t|
      ## Database authenticatable
      t.string :name, null: false, default: ""
      t.string :email, null: false, default: ""
      t.string :encrypted_password, null: false, default: ""

      ## Recoverable
      t.string :reset_password_token
      t.datetime :reset_password_sent_at

      ## Rememberable
      t.datetime :remember_created_at

      ## Trackable t.integer :sign_in_count, default: 0, null: false
      t.datetime :current_sign_in_at
      t.datetime :last_sign_in_at
      t.string :current_sign_in_ip
      t.string :last_sign_in_ip

      ## Confirmable
      t.string :confirmation_token
      t.datetime :confirmed_at
      t.datetime :confirmation_sent_at
      t.string :unconfirmed_email     # Only if using reconfirmable

      ## Lockable
      # t.integer :failed_attempts, default: 0, null: false
      # Only if lock strategy is :failed_attempts
      # t.string :unlock_token
      # Only if unlock strategy is :email or :both
      # t.datetime :locked_at
      t.timestamps
    end

    add_index :users, :email, unique: true
    add_index :users, :reset_password_token, unique: true
    # add_index :users, :confirmation_token, unique: true
    # add_index :users, :unlock_token, unique: true
  end
end

これで rake db:migration、サーバを起動して localhost:3000/users/sign_up にアクセスすると、下の画面のようにサインアップできるようになる。

user-sign-up

Sign up ボタンをクリックすれば OK だ。といってもまだメールを送る設定とかしていないので、サインアップは完了できない。でも、ログには出てくるはず……って、あれぇ?エラーになった。

devise-registration-error

なんでだ?
参考にしたページによれば、ログにメールが出力されて confirm 用のページへのリンクが乗っているはずなんだけど。うーん、勝手に name カラムを追加したのが悪いんだろうか。

いろいろ調べて試した結果

↓このページで答えを見つけた。

 cf. Ruby on Rails + Deviseの組み合わせでMissing host to link to! Please provide the :host parameter, set default_url_options[:host], or set :only_path to true – もっとクールにプログラミング

それと他にも間違いと思しきところが。結局直したのは次の3ヶ所。

1つ目は、マイグレーションファイルの下の方で次の行がコメントアウトされていたのを有効にした。

add_index :users, :confirmation_token, unique: true

2つ目は、app/models/user.rb に :confirmable オプションを追加した。

最後、3つ目が上のページにも書いてあるように、config/environments/development.rb の最後に一行追加。

config.action_mailer.default_url_options = { :host =&gt; 'localhost:3000' }

これでやっと、メールがログに出るようになった。

confirmation

href=”…” に示されているアドレスにアクセスすると、無事サインインの画面が出てサインインできた。

めでたしめでたし。というところで、今日はここまで。

Ubuntuの/home/takatohディレクトリをDeja DupでAmazon S3にバックアップする→失敗?

Deja Dup はファイル/ディレクトリのバックアップアプリ(本来は e と a の上に記号がつくんだけど入力できないので省略する)。Ubuntu の画面の左上のボタンを押して、Deja Dup で検索すると「バックアップ」ていうアプリが見つかる。これがどうも Deja Dup …なのか?
でもこのままだとバックアップ先の候補に Amazon S3 が出てこないので、Ubuntu ソフトウェアセンターで deja dup で検索して、Amazon S3 support
for Deja Dup をインストールする。そうすると S3 をバックアップ先に選べるようになる。

改めて「バックアップ」を立ち上げよう。バックアップするフォルダー(ホーム(takatoh))と無視するフォルダー(ゴミ箱と ~/Downloads)はデフォルトのまま。保存場所に Amazon S3 を選ぶと、S3 Access Key ID とフォルダーを入力するように画面が変化する。Access Key ID は AWS で取得したやつだとして、フォルダーの指定の仕方がよくわからないな。とりあえず、バケット名/フォルダ名(panicblanket/backup/nightschool)としてみた。スケジュールはどういうわけか保存期間しか入力できない。これもデフォルトのまま「期限なし」(ほかに「最低6か月」と「最低1年」が選べる)。
さて、これで「概要」の戻って「今すぐバックアップ」をクリックする。すると今度は「Amazon S3に接続」というタイトルで、Secret access key を入力する画面になった。キーを入力して「続行する」をクリック。結果、「バックアップに失敗しました」となった。なんでだ。

ググっても有用な情報は出てこない。そうこうするうち、うっかり自動バックアップを有効にしてしまったら、もう一度無効にしても「今すぐバックアップ」ボタンがグレイアウトしてしまった。こうなったら「次回のバックアップは今日です。」と書いてあるのを信じるしかない……んだけど、そもそも設定があってるのかわからないからなぁ……

外付けHDDをつないだままにしたらUbuntuにログインできない事案が発生

Ubuntu を起動した状態で USB の外付けハードディスクをつなぐと自動でマウントしてくれる。だからてっきりつないだまま起動しても自動で認識しれくれるのかと思ったら、そうはいかなかった。タイトルに書いたようにログインできない。もう少し正確に言うと、ログイン画面にはなるんだけど、パスワードを受け付けてくれない。
仕方がないから外付けハードディスクを取り外して強制再起動したら、今度はちゃんとログインできた。どうやら起動時にマウントするには /etc/fstab にちゃんと設定しないとダメなようだ。

で、いろいろ調べた結果、/etc/fstab に次の行を追加して再起動したら、無事にマウントできた。

# USB HDD WIWAXIA(HD-WLU3)
UUID=42D87A94D87A8647 /media/wiwaxia ntfs default 0 0

一番最初の UUID というのがディスクを識別するためのものらしい。sudo blkid コマンドで調べられる。

takatoh@nightschool:~$ sudo blkid
[sudo] password for takatoh: 
/dev/sda1: SEC_TYPE="msdos" LABEL="DellUtility" UUID="5450-4444" TYPE="vfat" 
/dev/sda2: LABEL="RECOVERY" UUID="78CCD2AACCD26244" TYPE="ntfs" 
/dev/sda3: LABEL="OS" UUID="3206D4AB06D47179" TYPE="ntfs" 
/dev/sda5: UUID="9c0ffb47-4031-4401-a18f-f7517a2e0378" TYPE="ext4" 
/dev/sda6: UUID="b8260b25-cc45-46c1-8152-7b1ea2cff5b9" TYPE="swap" 
/dev/sdb1: LABEL="WIWAXIA" UUID="42D87A94D87A8647" TYPE="ntfs"

一番最後の行が外付けハードディスク。

で、2番めのパラメータがマウントポイント。/media 以下にマウントするのが Ubuntu 流らしいので /medhia/wiwaxia というディレクトリを作ってそこにマウントすることにした。3番目のパラメータはディスクのフォーマット。もともと Windows で使ってたディスクなので ntfs を指定している。4番目以降のパラメータはよくわからないけど、参考にしたページに載ってたそのまま。

さて、これで再起動してみると、おお、今度は正常にログインできるようになった。ちゃんと設定したマウントポイントにマウントされている。

takatoh@nightschool:~$ ls /media
takatoh  wiwaxia
takatoh@nightschool:~$ ls /media/wiwaxia
$RECYCLE.BIN               bsl                     sombrero-storage
RECYCLER                   softwares               wallpapers
System Volume Information  sombrero-devel-storage

UbuntuでもRailsがうまく動いてくれない→解決

このあいだ Windows7 64bit で Rails が動いてくれない話を書いた。Ubuntu ではうまくいくかと思ったら話はそう簡単じゃなかった。

このあいだと同じように、書籍を管理するアプリを作ることにする。

takatoh@nightschool:~/w/$ rails new Librarian

本来ならこれだけで Rails サーバを起動できるようになるはず。ところが、

takatoh@nightschool:~/w/$ cd Librarian
takatoh@nightschool:~/w/Librarian$ rails server
/home/takatoh/.rvm/gems/ruby-2.1.1/gems/execjs-2.2.1/lib/execjs/runtimes.rb:51:in autodetect': Could not find a JavaScript runtime. See https://github.com/sstephenson/execjs for a list of available runtimes. (ExecJS::RuntimeUnavailable)
	from /home/takatoh/.rvm/gems/ruby-2.1.1/gems/execjs-2.2.1/lib/execjs.rb:5:in '
	from /home/takatoh/.rvm/gems/ruby-2.1.1/gems/execjs-2.2.1/lib/execjs.rb:4:in '
	from /home/takatoh/.rvm/gems/ruby-2.1.1/gems/uglifier-2.5.1/lib/uglifier.rb:3:in require'
	from /home/takatoh/.rvm/gems/ruby-2.1.1/gems/uglifier-2.5.1/lib/uglifier.rb:3:in '
	from /home/takatoh/.rvm/gems/ruby-2.1.1@global/gems/bundler-1.6.3/lib/bundler/runtime.rb:76:in require'
	from /home/takatoh/.rvm/gems/ruby-2.1.1@global/gems/bundler-1.6.3/lib/bundler/runtime.rb:76:in block (2 levels) in require'
	from /home/takatoh/.rvm/gems/ruby-2.1.1@global/gems/bundler-1.6.3/lib/bundler/runtime.rb:72:in each'
	from /home/takatoh/.rvm/gems/ruby-2.1.1@global/gems/bundler-1.6.3/lib/bundler/runtime.rb:72:in block in require'
	from /home/takatoh/.rvm/gems/ruby-2.1.1@global/gems/bundler-1.6.3/lib/bundler/runtime.rb:61:in each'
	from /home/takatoh/.rvm/gems/ruby-2.1.1@global/gems/bundler-1.6.3/lib/bundler/runtime.rb:61:in require'
	from /home/takatoh/.rvm/gems/ruby-2.1.1@global/gems/bundler-1.6.3/lib/bundler.rb:132:in require'
	from /home/takatoh/w/Librarian/config/application.rb:7:in '
	from /home/takatoh/.rvm/gems/ruby-2.1.1/gems/railties-4.1.4/lib/rails/commands/commands_tasks.rb:79:in require'
	from /home/takatoh/.rvm/gems/ruby-2.1.1/gems/railties-4.1.4/lib/rails/commands/commands_tasks.rb:79:in vblock in server'
	from /home/takatoh/.rvm/gems/ruby-2.1.1/gems/railties-4.1.4/lib/rails/commands/commands_tasks.rb:76:in tap'
	from /home/takatoh/.rvm/gems/ruby-2.1.1/gems/railties-4.1.4/lib/rails/commands/commands_tasks.rb:76:in server'
	from /home/takatoh/.rvm/gems/ruby-2.1.1/gems/railties-4.1.4/lib/rails/commands/commands_tasks.rb:40:in run_command!'
	from /home/takatoh/.rvm/gems/ruby-2.1.1/gems/railties-4.1.4/lib/rails/commands.rb:17:in '
	from /home/takatoh/w/Librarian/bin/rails:8:in require'
	from /home/takatoh/w/Librarian/bin/rails:8:in '
	from /home/takatoh/.rvm/gems/ruby-2.1.1/gems/spring-1.1.3/lib/spring/client/rails.rb:27:in load'
	from /home/takatoh/.rvm/gems/ruby-2.1.1/gems/spring-1.1.3/lib/spring/client/rails.rb:27:in call'
	from /home/takatoh/.rvm/gems/ruby-2.1.1/gems/spring-1.1.3/lib/spring/client/command.rb:7:in call'
	from /home/takatoh/.rvm/gems/ruby-2.1.1/gems/spring-1.1.3/lib/spring/client.rb:26:in run'
	from /home/takatoh/.rvm/gems/ruby-2.1.1/gems/spring-1.1.3/bin/spring:48:in '
	from /home/takatoh/.rvm/gems/ruby-2.1.1/gems/spring-1.1.3/lib/spring/binstub.rb:11:in load'
	from /home/takatoh/.rvm/gems/ruby-2.1.1/gems/spring-1.1.3/lib/spring/binstub.rb:11:in '
	from /home/takatoh/w/Librarian/bin/spring:16:in require'
	from /home/takatoh/w/Librarian/bin/spring:16:in '
	from bin/rails:3:in load'
	from bin/rails:3:in main'

こんな具合にエラーになってしまう。
エラートレースの最初の方に「Could not find a JavaScript runtime.」と書いてある。これが原因らしいので、ググってみるとそのものズバリのページが見つかった。
 cf. rails server 時に `autodetect’: Could not find a JavaScript runtime が出たら。
これによると、therubyracer という gem をインストールするための記述が Gemfile でコメントアウトされているのを、修正してインストールしてやればいいらしい。

gem 'therubyracer', platforms: :ruby

これで bundle install

takatoh@nightschool:~/w/Librarian$ bundle install
(略)

さあ、うまくいくかな?

takatoh@nightschool:~/w/Librarian$ rails server
=> Booting WEBrick
=> Rails 4.1.4 application starting in development on http://0.0.0.0:3000
=> Run `rails server -h` for more startup options
=> Notice: server is listening on all interfaces (0.0.0.0). Consider using 127.0.0.1 (--binding option)
=> Ctrl-C to shutdown server
[2014-07-06 06:31:57] INFO  WEBrick 1.3.1
[2014-07-06 06:31:57] INFO  ruby 2.1.1 (2014-02-24) [x86_64-linux]
[2014-07-06 06:31:57] INFO  WEBrick::HTTPServer#start: pid=21228 port=3000
rails-welcome-aboard

うまくいった!

Ubuntuの日本語のディレクトリ名を英語にした

Ubuntu のホームディレクトリ以下には、「ドキュメント」とか「デスクトップ」とか日本語の名前がついたディレクトリがある。分かりやすいといえばそのとおりではあるんだけど、cd で移動しようとするといちいち日本語変換しなきゃいけないのが面倒。そこでググってみたら、日本語ディレクトリ名を英語表記に変えられることが分かった。

 cf. Ubuntu 14.04 LTSをインストールした直後に行う設定 & インストールするソフト

このページの手順の通り、コンソールから次のコマンドを打ち込む。

takatoh@nightschool:~$ env LANGUAGE=C LC_MESSAGES=C xdg-user-dirs-gtk-update

するとダイアログが開いて、日本語ディレクトリ名を英語にするかと訊かれるので、Update Names ボタンを押す。
一旦ログアウトして再度ログインすると、今度は英語を日本語にするか、と訊かれるので、「次回から表示しない」にチェックを入れて「古い名前のままにする」ボタンを押す。
これでOK、と思ったら「ピクチャ」と「ダウンロード」だけ日本語のままで残ってる。Pictures と Downloads ディレクトリはあるにも関わらず。仕方がないから手で削除した。

新しいPCが届いたのでWindows7とUbuntuのデュアルブートにした

このあいだ、Ubuntu を VirtualBox にインストールして少し使ってみたけど、なかなかよさ気な感触だったので、新しく買った PC を Windows7 Proffesional と Ubuntu 14.04 LTS のデュアルブートにした。以下、手順のメモ。

PC の起動ドライブの順序を変える

PC の起動中に F2 キーを押して BIOS の画面に移る。で、起動ドライブの順序を内部 HD より CD/DVD が先になるように設定。これで「Ubuntu で始める Linux 入門キット」についていた DVD から起動できるようになった。

パーティションを分割して Ubuntu をインストール

DVD から起動して、インストールを選択する。プリインストールされている Windows7 が検出されてどうするか訊かれるので、Windows とは別にインストールする、を選ぶ。そうするとパーティションを設定する画面になるので、約 200GB を Ubuntu 用に分けた。あとは順番にボタンを押していくだけだ。時間は結構かかるけど、別に難しいところはなかった。まあ、こないだ一回やってるしね。

Ruby と Sublime text 3 と Git をインストール

兎にも角にもこの3つは最初にインストールしなきゃ。Ruby は 2.1.1 を rvm でインストールしたけど、これについてはこのあいだ書いたので省略。あ、ひとつ書いとかなきゃいけないのが、新しく起動したコンソールでは rvm の設定が無効になってるってこと。どうもコンソールの起動時に .bash_profile を読んでいないらしい。bash --login と入力することで有効にできるけど、これは後で調べておかねば。

Sublime text 3 は公式ページから、Ubuntu 64bit 用のバイナリをダウンロードして、インストールした。
 cf. http://www.sublimetext.com/3
Sublime text 自体のインストールは簡単で問題なく終了。あとはパッケージのインストールだけど、↓ここのページが役に立った。
 cf. ubuntu (Xubuntu) 14.04LTS で SublimeText3 の基本(共通)セッティング – けいれん現象の幽玄美よ
とくに Japanize と SublimeMozcInput のインストールのところ。パッケージインストーラで Japanize をインストールし終わるとその後の設定の説明が表示されるんだけど、この説明が Windows 向けの説明なので、ファイルをどこにコピーすればいいのか、このページを見なければわからなかった。
もうひとつ、ひっかかったのが日本語入力。コンソールでは日本語が入力できていたので Sublime Text 3 でも行けるのかと思ったらそうじゃなかった。まずは mozc と emacs-mozc をインストールしなくちゃいけないようだ。上に書いたようにコンソールでは日本語入力ができれるので mozc はインストール済み。で、emacs-mozc は次のようにコンソールからインストールした。

takatoh@nightschool:~$ sudo apt-get install emacs-mozc

その上で次の手順でインストール。

  1. 「ctrl + shift + p」でPackage Controlを開く
  2. 「package」と入力し「Package Control:Add Repository」を選択
  3. 「https://github.com/yasuyuky/SublimeMozcInput」をリポジトリ登録して[Enter]
  4. 「ctrl + shift + p」でPackage Controlを開く
  5. 「install」と入力し「Package Control:Install Package」を選択
  6. 「MozcInput」と入力「SublimeMozcInput」を選択しダウンロード

これでやっと日本語入力ができるようになった!
sublime-japanese

さて、つぎは Git のインストール。これもコンソールから。

takatoh@nightschool:~$ sudo apt-get install git
takatoh@nightschool:~$ sudo apt-get install gitk

そんでもって Windows から SSH のキーを .ssh ディレクトリごと ~/.ssh に持ってきて完了。

DropBox

最後に DropBox についても書いておこう。基本的には↓ここに書いてある通りにやればいい。
 cf. https://www.dropbox.com/ja/install?os=linux
Ubuntu(.deb) 64-bit をダウンロードすればいいようだけど、その下にコマンドラインでのインストール法が書いてあったので、その手順でやった。

takatoh@nightschool:~$ wget -O - "https://www.dropbox.com/download?plat=lnx.x86_64" | tar xzf -

で、デーモンを起動するらしい。

takatoh@nightschool:~$ ~/.dropbox-dist/dropbox

これでいいのかな。

さて、今日はここまで。

自作のgemをrubygems.orgに公開してみた

新しく作ろうとしているプロジェクトで使うライブラリがあって、しかも2つのプロジェクトで共通に使うつもりなので、こういう場合は gem にしてしまうのがいい。filestorage っていう一般名詞みたいな名前のライブラリだけど gem search してみたら見つからなかったので、いいや、作ってしまえ。
というわけで、ほんとにシンプルなものだけど gem を作って rubygems.org に登録してみた。以下手順のメモ。

Bundlerでプロジェクトを作る

^o^ > bundle gem filestorage
DL is deprecated, please use Fiddle
      create  filestorage/Gemfile
      create  filestorage/Rakefile
      create  filestorage/LICENSE.txt
      create  filestorage/README.md
      create  filestorage/.gitignore
      create  filestorage/filestorage.gemspec
      create  filestorage/lib/filestorage.rb
      create  filestorage/lib/filestorage/version.rb
Initializing git repo in C:/Users/hiro/Documents/tmp/filestorage
warning: LF will be replaced by CRLF in .gitignore.
The file will have its original line endings in your working directory.
warning: LF will be replaced by CRLF in Gemfile.
The file will have its original line endings in your working directory.
warning: LF will be replaced by CRLF in LICENSE.txt.
The file will have its original line endings in your working directory.
warning: LF will be replaced by CRLF in README.md.
The file will have its original line endings in your working directory.
warning: LF will be replaced by CRLF in Rakefile.
The file will have its original line endings in your working directory.
warning: LF will be replaced by CRLF in filestorage.gemspec.
The file will have its original line endings in your working directory.
warning: LF will be replaced by CRLF in lib/filestorage.rb.
The file will have its original line endings in your working directory.
warning: LF will be replaced by CRLF in lib/filestorage/version.rb.
The file will have its original line endings in your working directory.

これで gem の雛形ができる。git リポジトリもできていて、ファイルがステージされた状態になっている。まずはここでいったん commit。ライブラリの本体(lib/filestorage/local_filestorage.rb)を書いて、filestorage.gemspec を編集してもう一度 commit。GitHub にリポジトリを作って push しておく。
これでひとまずは出来上がり(まあ、バージョン 0.0.1 だからね)。

rubygems.orgからAPI Keyをとってくる

rubygems.org に gem を登録するには、API Key が必要。サインアップしてあったので(いつやったんだっけ?)、プロファイルの編集ページで API Key を見ることができる。これを %HOME%/.gems/credentials ファイルに保存するんだけど、ワンライナーがページに載っているのでそれを真似して保存した。ただし、載っているのは Unix 向けなので、Windows ではそのまま使えるわけじゃない。とはいってもやってることは簡単で、次のようにすればいい。

^o^ > curl -u takatoh https://rubygems.org/api/v1/api_key.yaml > %HOME%/.gem/credentials

gemをつくって登録する

もう一息だ。まずは gem を作る。

^o^ > bundle exec rake build
DL is deprecated, please use Fiddle
DL is deprecated, please use Fiddle
filestorage 0.0.1 built to pkg/filestorage-0.0.1.gem.

これで pkg ディレクトリの中に filestorage-0.0.1.gem ができた。これを rubygems.org に登録する。

^o^ > bundle exec rake release
DL is deprecated, please use Fiddle
DL is deprecated, please use Fiddle
filestorage 0.0.1 built to pkg/filestorage-0.0.1.gem.
Tagged v0.0.1.
Pushed git commits and tags.
Pushed filestorage 0.0.1 to rubygems.org.

これだけで OK。なんか git のタグをうって GitHub に push までしてくれるみたいだな。

そんでもって、これが登録後のページ。おお、ちゃんと登録されてる!

filestorage

追記

たいしたもんじゃないけど、書いたコードをさらしておく。

# encoding: utf-8

require 'pathname'
require 'fileutils'

module Filestorage

  class LocalFilestorage

    def initialize(base_dir)
      @base_dir = Pathname.new(base_dir)
    end

    def store(path, file)
      fullpath = @base_dir + path
      FileUtils.mkdir_p(fullpath.parent)
      if file.instance_of?(Pathname)
        FileUtils.cp(file, fullpath)
      elsif file.instance_of?(File)
        File.open(fullpath, "wb") do |f|
          f.write(file.read)
        end
      else
        File.open(fullpath, "wb") do |f|
          f.write(file)
        end
      end
      path
    end

    def get(path)
      fullpath = @base_dir + path
      File.open(fullpath, "rb")
    end

  end # of class LocalFilestorage

end # of module LocalFilestorage

なんか、1時間くらい経ってからページをみたら 18 downloads とか書いてある。もう 18 回もダウンロードされたってこと?みんながっかりしただろうな。

さらに追記

参考にしたページを書くのを忘れてた。ここを参考にしました。

 cf. RubyGems.org へ gem を公開する。 – komiyakの通り道