2011-02-20 26 views
14

Bảng điều khiển Heroku không chạy vòng trong ứng dụng của tôi (mặc dù chúng hoạt động trên máy cục bộ của tôi VÀ heroku cho phép thực hiện các hành động riêng lẻ).Chạy vòng lặp hoặc mã nhiều dòng trên Bảng điều khiển 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' 

Bạn có biết tại sao các lỗi này có thể xảy ra không?

Trả lời

27

nó không phải là một lỗi - đó là một tính năng như thế nào Heroku cho phép bạn tương tác với ứng dụng của bạn thông qua lệnh heroku console - trong khi xuất hiện như một bàn điều khiển đầy đủ nó chỉ đơn giản là không. Mỗi dòng được truyền qua http và được đánh giá khi bạn nhấn enter để bạn có thể không thực sự sử dụng các lệnh nhiều dòng, điều này sẽ làm việc mặc dù;

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

nếu nó không thể được viết trên cùng một dòng, bạn sẽ cần phải sử dụng một công việc cào hoặc ví dụ như

EDITED: Để chứa cú pháp đúng

+0

Điều này thực sự không hiệu quả đối với tôi trên bảng điều khiển Heroku. Nó vẫn thất bại tại '| user |' tương tự như cách OP thất bại tại '| c |' và cú pháp của tôi cũng giống như được viết trong câu trả lời. – iwasrobbed

+2

Bạn cũng có thể sử dụng dấu chấm phẩy ";" để viết nhiều dòng mã trên một dòng vật lý. – mpoisot

+0

@mpoisot - làm thế nào? Bạn có thể cho ví dụ về điều này không? – sscirrus

4

Cú pháp thích hợp cho việc này sẽ (ít nhất là cho Ruby 1.9.2 trên Heroku):

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

Sử dụng phương pháp John đã không làm việc cho tôi (và tôi chạy vào vấn đề này một lần thứ 2 vì vậy nó là thời gian để viết một câu trả lời mà làm việc cho người khác).

Bằng cách này, nếu bạn muốn nhiều dòng mã, bạn phải vượt qua nó tất cả trong như một dòng như thế này:

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

Cảm ơn câu trả lời của bạn! – sscirrus

0

cách tốt nhất mà tôi tìm thấy cho đến nay để thực thi mã đa dòng tùy ý chiều dài trong Heroku console là để bọc mã của tôi vào một lớp học với các mã thực thi gói gọn trong một phương pháp học

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

sau đó dán vào giao diện điều khiển và nhấn Enter

nay lớp học của bạn có sẵn cho bạn và bạn có thể gọi phương thức mà bạn xác định trên nó:

DoSomething.run

như vậy, cách này không cần phải nhảy qua hoops và ép tất cả mọi thứ vào một đơn line

Các vấn đề liên quan