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'
你知道为什么会出现这些错误吗?
答案 0 :(得分:29)
这不是错误 - 这是Heroku让你通过heroku console
命令与你的应用程序进行交互的一个特性 - 虽然看起来像一个完整的控制台,但它根本就不是。每行都通过http传输,并在按Enter键时进行评估,因此您无法实际使用多行命令,但这样可以正常工作;
User.all.each {|user| user.update_attributes(:active => true) }
如果无法在一行中写入,则需要使用rake任务或类似
已编辑:包含正确的语法
答案 1 :(得分:6)
这个的正确语法是(至少对于Heroku上的Ruby 1.9.2):
User.all.each {|user| user.update_attributes(:active => true)}
使用John的方法对我不起作用(我第二次遇到这个问题,所以是时候写一个适合其他人的答案了。)
顺便说一句,如果你想要多行代码,你必须将它全部传递给一行,如下所示:
User.all.each {|user| user.some_attribute = true; user.some_other_attribute = false; user.save }
答案 2 :(得分:0)
class DoSomething
def self.run
puts "line1"
puts "line2 .... etc"
end
end
然后将其粘贴到控制台中并按Enter键
现在您的课程可供您使用,您可以调用您在其上定义的方法:
DoSomething.run
所以,这样就没有必要跳过篮球并把所有东西都挤到一条线上
答案 3 :(得分:0)
聚会晚了一点,但是如果您使用Rails,也可以使用非常有用的rails runner命令
heroku run rails runner "
User.find_each do |user|
user.update(active: true)
end
#Any other multiline logic
" -a my_app
我在示例中使用了#find_each,因为它适合于较大的对象集合。