繁体   English   中英

createdb:命令行参数过多

[英]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无法理解为其提供的命令行参数。 特别是,单选项标志和双选项标志一起使用不正确:

  • --username必须设置为等于一个值
  • -w和--no-password含义相同,并且是多余的。 如果要使用此选项标志,则应使用一个或另一个,但不能同时使用两者。

此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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM