ラベル rails の投稿を表示しています。 すべての投稿を表示
ラベル rails の投稿を表示しています。 すべての投稿を表示

2012年6月9日

deviseを2.0にアップグレードするときのエラー

devise1.5系を使っていたのだが、いつの間にか、2.1にバージョンが変わっていた。
ちゃんと動くなら、別にかまわないのだが、どうも、rake db:reset、rake db:migrate してDBを作り直すとまともに動かなくなるようだ。
例えば、自分の作ったプロジェクトをgitにあげておいて、他の人がgit cloneして使うばあいに、問題が出る。こういうのって、ツールを公開するばあいには一般的だと思っていた。

出てくる問題は、rake db:migrateすると、 Database Authenticatableというメソッドはないというエラーだ。
この原因は、こちらに書かれているとおりdeviseを2.0系にアップデートした際、もともとのファイルにあった、Database Authenticatableなどのヘルパー(?)の利用を廃止した。
その結果、以前のmigrationファイルが動かなくなってしまった。

基本的に、あるプロジェクトのDBを新しく作るには、rake db:migrateではなく、rake db:schema loadが正しい処方らしい。
で、DBが変わるたびに、rake db:migrateして変更を追加していくわけだ。

引用するまでもないが、こんなエラーが出る
undefined method `database_authenticatable' for
#
しかしこれでは、いざというときに、migrationファイルが壊れていることになり、気持ちが悪い。
そこで、migrationファイルをいじることになる。
サイトがなくなると困るので、この記事の最後にべったりコピペしておこう。

なんとなくmigrationファイルをいじるのには抵抗がある。
しかし、中身が実質変わらないのならリファクタリングの一環ということで、よいという意見がある。



<migrationファイルの変更>
現状(1.5系)
create_table(TABLE_NAME) do |t|
  t.database_authenticatable :null => false
  t.recoverable
  t.rememberable
  t.trackable

  # t.encryptable
  # t.confirmable
  # t.lockable :lock_strategy => :failed_attempts, :unlock_strategy => :both
  # t.token_authenticatable
end
 2.0系
create_table(TABLE_NAME) do |t|
  ## Database authenticatable
  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
  t.datetime :current_sign_in_at
  t.datetime :last_sign_in_at
  t.string   :current_sign_in_ip
  t.string   :last_sign_in_ip

  ## Encryptable
  # t.string :password_salt

  ## 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 # Only if lock strategy is :failed_attempts
  # t.string   :unlock_token # Only if unlock strategy is :email or :both
  # t.datetime :locked_at

  # Token authenticatable
  # t.string :authentication_token

  ## Invitable
  # t.string :invitation_token

  t.timestamps
end

2012年4月16日

capistranoでgitのパスワードを何度も聞かれる

capistranoを使ってデプロイすると超らくな気がするんだけど、なぜか、デプロイするたびに4回パスワードを聞かれる。
何なのかなあ?と思っていると、どうやら、gitのリポジトリを取得する際に、同じサーバなのにパスワードを聞かれているみたい。

で、あほなことに、ローカルマシンからパスワードなしでかぎ認証でログインできるようにする設定を何度も見直して、やり直していた。
が、当然ながら、サーバのアカウントAからアカウントBにあるgitリポジトリを読みに行く際に認証が必要だった。
つまり、サーバのアカウントAの公開鍵をアカウントBに登録しなければならない。

たまたま今回はアカウントAとBが同じだったから、その辺がよく分からなかった。

というわけで、アカウントAで公開鍵(id_rsa.pub)を作って、それを/home/user_name/.ssh/authorized_keysに登録すると、パスワードを一回しか聞かれなくなった。
(この辺は、@ITの記事参照。毎回見てるなあ、いい加減覚えよう。)

最後の一回は、Webサーバのリスタート用のパスワードだ。
これはまた、リスタート時に、restart.txtをtouch(更新)するのだが、このときにどうもsudoを実施しているっぽい。
この問題は、どうやら、設定ファイル(deploy.rb)で
set :use_sudo , false

とすべきところがなぜかtrueになっていたため。

というわけで、ぶじパスワード入力なしで、コマンド一発でデプロイできるようになった。
スキルがないといらない苦労しますね。
ちゃんと勉強しようっと。

2011年9月29日

UbuntuでRails3.1

Rails3.1をCapistranoでデプロイしようとして、けっこうはまった。
そもそも、3.0時代にデプロイしておけばよかったのだが、どうせデプロイするなら、環境も最新にした方が、後でめんどうがないだろうとRailsをこの際アップデートしておいた。
みんなも大好きなRailsCastsを見ながら、一時停止を繰り返しながら、AsciiCastsの方からコピペして、設定していく。
ほんとは、AsciiCastsだけでじゅうぶんなんだけど、そこはまあ、ライブ感があって楽しいので、ビデオを見ながらやっていく。

さて、いろいろやって、cap deploy:updateまでこぎつけた。
ここで出る、javascriptのランタイムがないというエラーは、こちらをはじめとして、あちこちで報告されている。
で、Gemfileに以下を追記。
gem 'execjs'
gem 'therubyracer'


これで動くかと思えば、そうでもない、と。
どういう環境だと、これで解決するのかな。
うちは、Ubuntu10.10なんですが、うまく動きません。

なるほど、ランタイムがないのか。therubyracerは違うの?と思いつつnode.jsを入れようと思い立つ。
とりあえず、適当にやってみる。
apt-get install node


これだと、
axconfig: port 1 not active

こんなエラーが出る。
なんでやねん!

こちらでは、「それは、node.jsではなく、nodeをインストールしたからだ。ずぼらせずに、gitでとってきてコンパイル・インストールしろ。」と書かれている。
どうやら、nodeというパッケージは全然関係ないみたい。


git clone https://github.com/joyent/node.git
cd node && ./configure && make
make test
make install

makeでエラーが出るけど、「無視されました」と出て、コンパイル成功。
testでもエラーが出るけど、無視してインストール。
(いつか怖いことが起きそうな気がする)


ここで再びエラー。

今度は、currentがディレクトリなので削除できないよ!ってやつ。
そりゃあ、rm -fでは削除できないでしょ?
勝手にディレクトリ作って、削除できないようもないけどなあ。。。
そういえば、このディレクトリ(current/public)は、apacheをちゃんと設定できているかのテストのために作成したものだった。

そこで、このディレクトリを削除すると、ついにデプロイが完了。

というわけで、もうちょっとしたら、アプリ、超αですが、リリースできそうです。

2011年9月28日

Rails3.1で開発中

以前から開発を進めていたツールの開発が、ようやく一段落した。
だいたい「自分では使える」ようになった感じ。
これから、他の人も使えるように、デザインをちゃんとしたり、操作の動線を考えたりする必要がある。

で、今日はherokuを設定してみたのだが、二点、はまった。

1.gemでpostgresqlを要求される。
 Gemfileに'pg'を追加したらエラーがなくなった

2.fakerがエラーを出す。
rake aborted!
no such file to load -- faker

こちらは、ちょうど同じことを聞いている人がいたので、このとおりに、sample_data.rakeからrequire'faker'を削除したら問題なくなった。

herokuはproduction環境だから、fakerなんて関係なのになって思うけど、なんでなんでしょうね。

2011年4月9日

link_to :remote=>trueには、Named Routeが必要?

Rails3でAJAXを使って、画面を動的に更新したいと思っていたのだが、どうもうまく行かなくてすごくはまってしまった。
どうやら、replace_htmlなどを動作させるには、Named Routeを指定する必要があるようだ。

jquery-railsをインストールした環境で、こんなコードは動く。
def show
@item = Item.find(params[:id])
respond_to do |format|
format.js do
render(:update) do |page|
page.replace_html 'Change', "Okay!"
end
end
end
end

しかし、これは動かない。
def showitem
@item = Item.find(params[:id])
respond_to do |format|
format.js do
render(:update) do |page|
page.replace_html 'Change', "Okay!"
end
end
end
end


いずれも、ページ中の
の中身を置き換えるだけのものだ。

show.html.erbで定義したリンクはこんな感じ。
showへのリンク: <%= link_to 'update', item_path(@mole), :remote => true %>
showitemへのリンク: <%= link_to 'update2', :action => 'showitem', :remote => true, :format => 'js' %>


showitemは、config/routes.rbでもこんな感じで定義
match 'items#showitem' => 'items#showitem'


こうすると、show.html.erbのソースは
update
update2

となる。
remote => trueが前者はちゃんとdata-remoteと認識されているのに対して、後者は、単なるパラメータになってしまっている。

後者は、リンクをクリックすると、javascriptが表示されるだけで、何も起こらない。

ここでずーっとはまったのだが、ふと、Named Routeを設定したらどうなるのか?と思い、やってみたら、うまく動いた。

route.rb
match 'items#showitem' => 'items#showitem', :as => 'showitem_item'

showitemへのリンク: <%= link_to 'update2', showitem_item_path, :remote => true %>

htmlのソース:update2


なにか間違えているからこうなるのかなあ。
Named Routeなしで同じことができるべきという気がするんだけど・・・

2010年1月6日

Snow LeopardのMacportsでgitをインストール


Railsで遊んでいて、これが入れたくなったので、gitをインストールすることにした。
今まで、特に必要性を感じていなかったので、インストールしてなかったんですね。

それで気づいたのだが、どうやら、git、入らない模様。
依存パッケージのgettextがバイナリの関係(64ビット化の影響みたい)で、インストールできない。
>sudo port install +universal パッケージ名
とすれば、32ビットと64ビットの両方のバイナリが作成されるようなので、gettext←expat←ncurses←libiconvと依存関係をたどってインストールを繰り返した。
これでようやく、gitもインストールできるようになった。
やれやれ。

この結果、2dconceptのjQuery datagridが使えるようになった。(右上の画像)
いろいろといじると、インプレース編集や検索での絞り込みもできるようだ。
一度動くと後が楽になるので、なんだか楽しみだ。
開発にも力が入るというもの。

2010年1月3日

久々にRailsやってたら、:uniqueがエラー

正月休みのうちに、学生の指導ログのようなものをつくろうと思いたった。
個々の学生にどんな指導をしたのか、つい忘れてしまうので、記録できるようにするもの。

当面はローカルに保存するようにしているが、もう少し使えるようになったらログイン機能もつくろうと思う。

いろいろ調べてみると、電子カルテとほぼ同じようなものになればよいことが分かる。
ただ、ソースが公開されているものや、自分でカスタマイズしやすそうなものが見あたらなかったので、自分で作ってみる。
比較的少ない人間(100人程度まで?)を相手にコミュニケーションを取る人には便利じゃないかな。
議事録にもなりそう。
データ量が増えたら、参加回数なんかも出せるようにしようと思う。

それはさておき、各記録に参加者を追加するために、多対多のアソシエーションをつくってみた。
DHHの「RailsによるアジャイルWebアプリケーション開発 第2版」を参考にやっているのだが、同じ参加者を複数登録しないようにするための設定がうまくいかない。
p.313の:uniqueオプションを使用しようとしているのだが、これが「そんなオプション知らないよ」と蹴られてしまう。
結局は、:select "distinct name.*"の方で事なきを得たが、新バージョンで使い方が変わったのかな。

最新のRailsに関する情報はないかなとamazonで検索したら、さっきの本、第三版がでている!

ショックだけど、また買わないとなあ。
なんせ、いろいろRails本、買ってみたけど、これが一番いい本だと思う。

2008年10月27日

Textdriveでhomeにgemをインストールする

久々に、rails製のアプリケーションインストールしようと思ったら、依存ライブラリがあって、インストールできませんでした。

悔しいので、ホームにgemインストールすることにしました。

gemのユーザマニュアルに載っている方法だとうまく行かないので、いろいろ探すと、http://www.dreamhost.com/:Dreamhosthttp://wiki.dreamhost.com/RubyGems:Wikiにそれらしい情報]がありました。

ここは親切ですね。

かなりおもろいホスティング業者らしいので、僕も乗り換えようかなあ。。。

gemダウンロードしてきて、適当なところ(~/src/rubygems/としましょう)に展開して、そのディレクトリに移動します。

以下を実行します。

export PATH="$HOME/bin:$HOME/.gems/bin:$PATH"

export RUBYLIB="$HOME/lib:$RUBYLIB"

export GEM_HOME="$HOME/.gems"

export GEM_PATH="/usr/lib/ruby/gems/1.8:$GEM_HOME"

次に、インストールスクリプトを実行します。

ruby setup.rb config --prefix=$HOME/src/gemstuff

あとは、.profileに上記の環境変数(exportなんとかね)を記入しておけば大丈夫。

textdriveにThetisをインストール

完全無料の次世代グループウェアというふれこみのThetisをインストールしてみました。
Railsアプリということで、なかなか敷居が高かったのですが、がんばってなんとかインストールできました。
が、文字化け。
もともと日本語完全対応なんだけど、なぜか日本語が全部???になります。
おそらく、MySQLで、SET_NAMES 'utf8'; とかすれば直りそうな気がします。

Thetisに限らずグループウェア、これまでになんどかトライしてみましたが、続きません。
なぜか。。。
基本、一人で仕事しているし、職場には別のシステム(といっても、紙ベース)があるから。
でも、グループウェアはあると便利だろうなという気がしています。
とくに今目指している「暮らしをいとなむ研究所」をつくるためには不可欠なはずです。
Webベースの研究所になるので、お互いのコミュニケーション手段はいいものを使いたいのです。

そこでThetisをインストールして、文字化けをみないことにして、ちょこちょこといじってみました。
けっこうデスクトップアプリケーションと同じような使い勝手ができるみたい。
他の人がやったことは、トップページ(デスクトップといいます)に表示できるみたいだし、ワークフロー(決済システム)はなかなか強力そう。

理由は分からないんですが、頻繁にエラーが出るので、いろいろ試しながら、開発陣にフィードバックしていきたいところです。

インストール方法は、Textdriveのサイトに書いてあるとおりかな。
あ、Railsのバージョンが古いのと、gemにwill_paginateが入ってないので、先日の記事のように、自分でホーム以下にgemをインストールする必要があります。