『LoadError: no such file to load --』のエラーについて
Railsでアプリを開発中にどうしてもirbを使って、
簡単なテストをしたい時がありますよね。
今回、Twitter Gemを使って開発しているのですが、
irbを起動後、requireすると、
『LoadError: no such file to load -- twitter』のエラーが発生しました。。
TK-2:~ Takashi$ irb 1.9.2p290 :001 > require 'twitter' LoadError: no such file to load -- twitter
Twitter Gemはインストールしているはずなのに、なぜ?
とちょっと考えましたが、RVMで複数バージョンを動かしていて、
単純に実行している場所が間違えているのであろうと気付きました。
(もの凄く初心者ですみません。。)
そこでまずは、下記のRVMコマンドで実行場所のチェックをします。
rvm gemdir
すると、返って来ました結果が。現在、勉強中のRails Tutorialの方を
使っていたわけです。。
TK-2:~ Takashi$ rvm gemdir /Users/Takashi/.rvm/gems/ruby-1.9.2-p290@rails3tutorial
Twitter Gemがインストールされているわけもなく。。
そこで、実行場所を下記のRVMコマンドで変更します。
※「ruby-1.9.2-p290」の箇所は環境により任意で変更して下さい。
rvm use ruby-1.9.2-p290
すると、無事に切り替わり、
TK-2:~ Takashi$ rvm use ruby-1.9.2-p290 Using /Users/Takashi/.rvm/gems/ruby-1.9.2-p290
再度、requireを試すと、
TK-2:~ Takashi$ irb 1.9.2-p290 :001 > require 'twitter' => true
正常にrequireされました!
『undefined method `each' for ...』のエラーについて
超基本中の基本。
ですが、RailsでWebアプリ作っている時に、このエラーが出て
ちょいと調べたので、調べたものは記しておこうという姿勢で行きます。
エラーメッセージの内容は凄く単純で、
『undefined method `each' for ...』
要するに、for以下の文言に出てくるオブジェクトに対して、
eachメソッドが定義されていないということ。
個人的には配列で返って来ると想定していたオブジェクトに使用して
いたのですが、どうも配列で返って来なかったみたい。
以下、簡単なテスト。
aを配列オブジェクトとした場合
1.9.2-p290 :001 > a = [1,2,3] => [1, 2, 3] 1.9.2-p290 :002 > a.each do |a| 1.9.2-p290 :003 > p a 1.9.2-p290 :004?> end 1 2 3 => [1, 2, 3]
正常終了。
aを文字列オブジェクトとした場合
1.9.2-p290 :005 > a = "test" => "test" 1.9.2-p290 :006 > a.each do |a| 1.9.2-p290 :007 > p a 1.9.2-p290 :008?> end NoMethodError: undefined method `each' for "test":String
『undefined method `each' for ...』のエラーが発生します。
文字列オブジェクトはeachメソッドを持っていないこととなります。
Rails3で間違えてgenerate controllerしたものを取り消したい場合
引き続き基本的なことから。
現在、Railsを使って静的なページ作成(Respiraという個人プロジェクト用)
を始めましたが、誤って、generate controllerを実行してしまい、
この結果を取り消したいケースが発生しました。
rails generate controller Respiras home about webapp contact
上記コマンドを実行した結果、
create app/controllers/respiras_controller.rb route get "respiras/contact" route get "respiras/webapp" route get "respiras/about" route get "respiras/home" invoke erb create app/views/respiras create app/views/respiras/home.html.erb create app/views/respiras/about.html.erb create app/views/respiras/webapp.html.erb create app/views/respiras/contact.html.erb invoke test_unit create test/functional/respiras_controller_test.rb invoke helper create app/helpers/respiras_helper.rb invoke test_unit create test/unit/helpers/respiras_helper_test.rb invoke assets invoke coffee create app/assets/javascripts/respiras.js.coffee invoke scss create app/assets/stylesheets/respiras.css.scss
コントローラーはもちろん、ルートや各種erbファイル等が作成されてしまいます。
やり直す場合は、前出のコマンドのgenerateをdestroyに変更すれば良いです。
rails destroy controller Respiras home about web app contact
コマンドの実行結果は、
remove app/controllers/respiras_controller.rb route get "respiras/contact" route get "respiras/webapp" route get "respiras/about" route get "respiras/home" invoke erb remove app/views/respiras remove app/views/respiras/home.html.erb remove app/views/respiras/about.html.erb remove app/views/respiras/webapp.html.erb remove app/views/respiras/contact.html.erb invoke test_unit remove test/functional/respiras_controller_test.rb invoke helper remove app/helpers/respiras_helper.rb invoke test_unit remove test/unit/helpers/respiras_helper_test.rb invoke assets invoke coffee remove app/assets/javascripts/respiras.js.coffee invoke scss remove app/assets/stylesheets/respiras.css.scss
実行結果から、お分かりの通り、ファイルだけではなく、
ルートも奇麗に元通りです。素晴らしい!
Ralis3でSELECTタグを使う方法
本当に簡単なことでも書き記して行こうと思う。
誰かの助けになるのであれば、本望。
今日は自前のWebアプリにSELECTタグで抽出条件を
入力させる機能を実装しようとしていて、
ちょっと調べるのに時間掛かったので、書いておきます。
皆さんもお持ちでしょう、Rails3レシピブックには、SELECTタグを簡易的に作成する
方法として下記の記述がありました。
<%= select_tag("count", "<option>1</option><option>2</option><option>3</option>".html_safe) %>
でも、これではValue属性が指定出来ない。。
通常はユーザー側には、単語や分かり易い名称で選ばせて、
処理では、Value属性に入力されている値を使いたい。
そこで、下記のようにすれば、実装可能となる。
※自前のWebアプリ用コードです。
<%= select_tag("how_many_tweets", options_for_select([["Most Recent :最近の",0],["More Recent :ちょっと前も",1],["Older :かなり古いのも",2]])) %>
簡単なことも書いて行こうと思う。
Ruby on Rails 〜 ActionView::Template::Error (application.css isn't precompiled)のエラーについて
Rails3.1以降でアセットパイプラインの考え方が導入され、
「ActionView::Template::Error (application.css isn't precompiled)」のエラーが
発生することがあるようです。
個人的にはアプリをherokuへディプロイ後、URLへアクセス時に発生しました。
解決方法としては、下記が参考になりました。
http://d.hatena.ne.jp/tetsuyai/20110920/1316504421
少し急いでいたのと、都度コンパイルでも速度的に問題無さそうだったので、
config/environments/production.rbの
「config.assets.compile」パラメータを「true」に変更し対応。
無事解決しました!
ただ、後でコンパイルする方法もやってみようと思います。
ActiveRecord::ConnectionNotEstablishedのエラーについて
Rails3.1以降でActiveRecordを使用していないアプリを
herokuへディプロイした場合、発生するエラー
「ActiveRecord::ConnectionNotEstablished」の解決方法について、
ちょっとだけハマったので書いておきます。
ローカルの環境では問題が無く動いているので、原因が分からなかったのですが、
下記英語のサイトが助けてくれました。
http://www.benjaminoakes.com/2011/09/15/activerecordconnectionnotestablished-in-rails-3-1-on-heroku/
解決方法として複数上げてくれているのですが、個人的には
以下の流れで試してみました。
(1)spec/spec_helper.rbの修正
# If you're not using ActiveRecord, or you'd prefer not to run each of your # examples within a transaction, comment the following line or assign false # instead of true. config.use_transactional_fixtures = true
コメントには、ActiveRecordを使用していないのであれば、
この設定をコメントにするか、trueをfalseでセットしなさいとある。
で、コメントもfalseもどちらも試してみたのですが、
エラーは回避せず。。
そこで
(2)config/application.rbの修正
# Pick the frameworks you want: require "active_record/railtie" require "action_controller/railtie" require "action_mailer/railtie" require "active_resource/railtie" require "sprockets/railtie" # require "rails/test_unit/railtie"
「require "active_record/railtie"」を下記のようにコメント化。
# Pick the frameworks you want: # require "active_record/railtie" require "action_controller/railtie" require "action_mailer/railtie" require "active_resource/railtie" require "sprockets/railtie" # require "rails/test_unit/railtie"
再度、herokuへディプロイ。動作確認。。。
無事に動きました!
結論から言うと(2)config/application.rbの修正を実施すれば良いかと思います。
ActiveRecordを使用しないアプリも多々あるでしょうから、
覚えておいて損は無いと思います。
※2012/02/12追記
どうやら、(2)config/application.rbに
「require 'rails/all'」の一文が追加になっているアプリもあるようです。
その場合、ここが邪魔することもあるようなので、私の場合、
コメント化してます。そうするとエラーが発生しなくなります。
『レバレッジ・リーディング』
- 作者: 本田直之
- 出版社/メーカー: 東洋経済新報社
- 発売日: 2006/12/01
- メディア: 単行本(ソフトカバー)
- 購入: 34人 クリック: 447回
- この商品を含むブログ (548件) を見る
何かと賛否両論ありそうな本ですが、個人的には良書と思います。
この本があったから、本をたくさん読むようになったし。
いわゆるハウツー本でしょ?と馬鹿にする前に一読の価値はあると思います。
職業、年齢、性別、出身等に関わらず、やっぱり人は本を読むことが
一番大切であることを気付かされます。
最近、出版された以下のものも、1時間もあれば読めると思いますので、
ぜひ読んでみて下さい。
とにかく本は読まないより、読んだ方がいいです!
リーディング3.0 ―少ない労力で大きな成果をあげるクラウド時代の読書術
- 作者: 本田直之
- 出版社/メーカー: 東洋経済新報社
- 発売日: 2011/04/22
- メディア: 単行本(ソフトカバー)
- 購入: 2人 クリック: 93回
- この商品を含むブログ (25件) を見る