Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/heroku/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby 具有字符串参数的Sinatra应用程序的Heroku rake任务失败_Ruby_Heroku_Sinatra_Rake - Fatal编程技术网

Ruby 具有字符串参数的Sinatra应用程序的Heroku rake任务失败

Ruby 具有字符串参数的Sinatra应用程序的Heroku rake任务失败,ruby,heroku,sinatra,rake,Ruby,Heroku,Sinatra,Rake,我刚刚向heroku部署了一个Sinatra应用程序,该应用程序包含两个rake任务: task :create_db , [:db_id , :db_name] task :destroy_db , [:db_id, :token] 当我跑的时候 heroku run rake -T 在控制台中,Heroku打印以下响应: (in /app) rake create_db[db_id,db_name] # Creation count database task rake destro

我刚刚向heroku部署了一个Sinatra应用程序,该应用程序包含两个rake任务:

task :create_db , [:db_id , :db_name]
task :destroy_db , [:db_id, :token] 
当我跑的时候

heroku run rake -T
在控制台中,Heroku打印以下响应:

(in /app)
rake create_db[db_id,db_name]  # Creation count database task
rake destroy_db[db_id,token]   # Destroy database task
然而,当我跑步时:

heroku run rake create_db['test', 'test database']
它会响应以下错误:

(in /app)
rake aborted!
Don't know how to build task 'create_db[test,'
/usr/local/lib/ruby/1.9.1/rake.rb:1720:in `[]'
/usr/local/lib/ruby/1.9.1/rake.rb:2040:in `invoke_task'
/usr/local/lib/ruby/1.9.1/rake.rb:2019:in `block (2 levels) in top_level'
/usr/local/lib/ruby/1.9.1/rake.rb:2019:in `each'
/usr/local/lib/ruby/1.9.1/rake.rb:2019:in `block in top_level'
/usr/local/lib/ruby/1.9.1/rake.rb:2058:in `standard_exception_handling'
/usr/local/lib/ruby/1.9.1/rake.rb:2013:in `top_level'
/usr/local/lib/ruby/1.9.1/rake.rb:1992:in `run'
/usr/local/bin/rake:31:in `<main>'
(在/app中)
雷克流产了!
不知道如何构建任务“create_db[test,”
/usr/local/lib/ruby/1.9.1/rake.rb:1720:in`[]'
/usr/local/lib/ruby/1.9.1/rake.rb:2040:in'invoke_task'
/usr/local/lib/ruby/1.9.1/rake.rb:2019年:在“顶层的块(2层)”中
/usr/local/lib/ruby/1.9.1/rake.rb:2019:in'each'
/usr/local/lib/ruby/1.9.1/rake.rb:2019年:在“顶层块”中
/usr/local/lib/ruby/1.9.1/rake.rb:2058:在“标准异常处理”中
/usr/local/lib/ruby/1.9.1/rake.rb:2013年:“顶级”
/usr/local/lib/ruby/1.9.1/rake.rb:1992:in'run'
/usr/local/bin/rake:31:in`'
我不太清楚为什么会失败,但是我猜测这与字符串参数有关。正如您在上面看到的,它说“不知道如何构建任务‘create_db[test’,测试显示时没有字符串

您知道如何从命令行运行此任务吗?

来自:

rake任务名称及其参数必须是rake的单个命令行参数。这通常意味着没有空格。如果需要空格,则应引用整个rake+参数字符串。如下所示:

rake“姓名[比利·鲍勃,史密斯]”
(引用规则因操作系统和shell而异,因此请确保查阅适用于操作系统/shell的适当文档)

还请注意,您不需要引用单个参数

在您的情况下,这应该有效:

rake“创建数据库[测试,测试数据库]”
这也适用于:

rake create_db[test,'test database']
请注意,第二个参数被引用,但逗号和引号之间没有空格,因此shell将整个参数视为单个参数

论赫罗库 使用
heroku run
,这不起作用,因为在这种情况下,命令会被shell解释两次,一次是由您自己解释,另一次是在heroku Dyno上解释,因此您需要确保由heroku运行的命令具有正确的引号

您需要对引号进行转义:

heroku run rake\“创建\u db[测试,测试数据库]\”
因此,在Dyno上运行的命令是
rake“create_db[test,test database]”
;或者引用以下引号:

heroku run rake“创建数据库[test,'test database']” 因此,运行的命令是
rakecreate_db[test,'testdatabase']

原因是什么

$heroku run rake create_db['test','test database']

由于参数之间/内部存在空格,无法正常工作。以下操作将正常工作

$heroku run rake“创建数据库['test','test database']”

对我来说这很有效

heroku run rake "namespace:task['var1','var2']"

这肯定是字符串参数的问题。我已将其作为create_db[test,test db]传递,它可以工作…显然字符串参数不能用于Heroku。我在原始版本中发布了它question@NickONeill您的错误不会完全相同,至少在第二种情况下:
不知道如何构建任务“create_db”[test,test'
。我更新了我的答案,并说明了如何让它在Heroku上运行。这对你很有用……那么OP是否应该尝试类似于
Heroku运行rake“create_db['test','test database']”这样的方法呢?