我是Ruby和web开发的新手。我将Windows764位与Ruby2.0结合使用,并安装了PostgreSql9.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文件在我之前的文章中:createdb not recognized as a command when using ActiveRecord
我想问题可能出在这里:
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: too many command line arguments,但这并不能解决问题。
还有一些讨论是关于把“你的选项放在你的选项前面少一些参数”和这些链接中选项的错误顺序:
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使用默认的Windowscmd.exe来运行该命令,&&操作符将不起作用。
我可能会把它分成两个陈述:
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...

最后,如果问题仍然存在,那么在Postgres二进制文件路径之前命中的路径中必须有另一个createdb可执行文件。您可以尝试system("path")并查看输出是什么,然后检查这些dirs是否有冲突的createdb

关于ruby - createdb:命令行参数过多,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30767865/

10-13 03:21