[英]createdb: too many command line arguments
我是Ruby和Web开发的新手。 我将Windows 7 64位和Ruby 2.0一起使用,并且安装了PostgreSQL 9.4。
我正在尝试使用ActiveRecord创建数据库。 我检查我的postgresql服务器是否正在运行,并进行捆绑安装以确保拥有所有必需的gem。 当我运行“ bundle exec rake db:create”时,rake似乎能够在PostgreSQL目录中找到createdb.exe,但是由于某种原因,它告诉我我有太多命令行参数:
C:\Users\MH\Desktop\activerecord-template> bundle exec rake db:create
Creating activerecord-template development and test databases if they don't exist...
'createdb': too many command line-arguments (first is "postgres")
我的Gemfile,Rakefile和config.rb文件在我以前的文章中: 使用ActiveRecord时createdb无法识别为命令
我认为问题可能出在以下Rakefile中:
desc "Create #{APP_NAME} databases"
task "create" do
puts "Creating #{APP_NAME} development and test databases if they don't exist..."
system("createdb #{DB_NAME} --username #{DB_USERNAME} -w --no-password && createdb #{TEST_DB_NAME} --username #{DB_USERNAME} -w --no-password")
end
我尝试删除和更改-w的顺序,如下所示: pg_dump:命令行参数过多 ,但这并不能解决问题。
关于将“您的选项放在没有选项的参数之前”以及这些链接中选项的错误顺序,还有一些讨论:
http://grokbase.com/t/postgresql/pgsql-general/07avnzajn7/createdb-argument-question
http://postgresql.nabble.com/pgpass-does-not-work-for-createlang-td2118667.html
但是我并没有真正理解代码的含义。
由于您使用的是Windows,因此该行的语法可能存在问题:
system("createdb #{DB_NAME} --username #{DB_USERNAME} -w --no-password && createdb #{TEST_DB_NAME} --username #{DB_USERNAME} -w --no-password")
如果Ruby使用默认的Windows cmd.exe
运行命令,则&&
运算符将不起作用。
我可能将其分解为2条语句:
ok = system("createdb #{DB_NAME} --username #{DB_USERNAME} -w --no-password")
ok &&= system("createdb #{TEST_DB_NAME} --username #{DB_USERNAME} -w --no-password")
# ...can check "ok" for success of both calls if you like...
最后,如果问题仍然存在,则PATH中必须有另一个createdb
可执行文件,该可执行文件在Postgres二进制文件路径之前被单击。 您可以尝试system("path")
看看输出是什么,然后检查那些目录中是否有冲突的createdb
。
Rakefile的“创建”任务使用PostgreSQL中的createdb.exe。 system()接受了createdb.exe的选项。 这些资源中描述了这些选项:
对于此特定的Rakefile,选项标志的格式错误,因此createdb.exe无法理解为其提供的命令行参数。 特别是,单选项标志和双选项标志一起使用不正确:
此Rakefile中system()的正确语法是:
system("createdb #{DB_NAME} --username=#{DB_USERNAME} && createdb #{TEST_DB_NAME} --username=#{DB_USERNAME}")
您也许可以保留-w或--no-password标志,但是如果您继续收到有关命令行参数的命令终端错误,请完全如上所示删除这两个标志,并让命令终端询问您密码默认情况下连接到postgres服务器。
我只是在Windows 7计算机上进行了此操作。
正确的答案是:
system("createdb --no-password --username=#{DB_USERNAME} #{DB_NAME} && createdb --no-password --username=#{DB_USERNAME} #{TEST_DB_NAME} ")
我是从您的帖子以及阅读dbcreate --help
那里得到的。 争论顺序错了。 请注意, 在所有选项之后,最后一个参数是DB_NAME
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.