2011-02-20 20 views
14

Herokuコンソールは自分のアプリケーションでループを実行しません(ローカルマシンで動作しますが、herokuでは個々のアクションを実行できます)。Herokuコンソールでループまたは複数行のコードを実行する

@companies.each do |c| 
SyntaxError: /home/heroku_rack/lib/console.rb:150: syntax error, unexpected $end 
@companies.each do |c| 
        ^
/home/heroku_rack/lib/console.rb:140:in `eval' 
/home/heroku_rack/lib/console.rb:140:in `_eval' 
/home/heroku_rack/lib/console.rb:73:in `block in process_command' 
/usr/ruby1.9.2/lib/ruby/1.9.1/monitor.rb:201:in `mon_synchronize' 

なぜこれらのエラーが発生しているのでしょうか?

答えて

27

これはエラーではありません。それは、Herokuがheroku consoleコマンドを使用してアプリケーションとやり取りする方法の特徴です。完全なコンソールのように見えます。各行はhttpで送信され、Enterキーを押すと評価されるので、実際には複数行のコマンドを使用することはできません。このための適切な構文は次のようになり、正しい構文に

+0

これは実際に私のHerokuコンソールでは機能しませんでした。 OPが '| c |'で失敗したのと同様に、 '| user |'で失敗し、構文も解答と同じです。 – iwasrobbed

+2

セミコロン ";"を使用することもできます。 1つの物理的な行に複数行のコードを書くことができます。 – mpoisot

+0

@mpoisot - どうですか?あなたはこれの例を挙げていただけますか? – sscirrus

4

を含むように:それは1行で記述することができない場合

User.all.each {|user| user.update_attributes(:active => true) } 

あなたはrakeタスクや、

と同じように編集を使用する必要があります(少なくともHerokuの上のRuby 1.9.2用):ジョンのメソッドを使用して

User.all.each {|user| user.update_attributes(:active => true)} 

が私のために動作しませんでした(と、他人のために働いていた答えを書くための時間だったので、私はこの問題に2回目を走りました)。ところで

、あなたは複数行のコードをしたい場合、あなたはこのように1行ですべてを渡す必要があります:

User.all.each {|user| user.some_attribute = true; user.some_other_attribute = false; user.save } 
+1

あなたの答えをありがとう! – sscirrus

0

私はこれまでの任意の複数行のコードを実行することが分かっ最善の方法をHerokuのコンソールの長さは、コンソールにこれを貼り付けるクラスメソッド

class DoSomething 
    def self.run 
    puts "line1" 
    puts "line2 .... etc" 
    end 
end 

に包まれた実行可能コードでクラスに自分のコードをラップすることであり、今

を入力ヒットあなたのクラスはあなたに利用可能であり、あなたはそれの上に定義されたメソッドを呼び出すことができます。

DoSomething.runを

ので、一つの上にフープを介してジャンプして、すべてを絞るする必要はありません。この方法line

関連する問題