簡體   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