2015-06-10 63 views
1

我是Ruby和web開發的新手。我使用Windows 7 64位和Ruby 2.0,並安裝了PostgreSQL 9.4。createdb:太多命令行參數

我想使用ActiveRecord來創建數據庫。我檢查了我的postgresql服務器正在運行,並且我進行了捆綁安裝,以確保我擁有所有必需的gem。當我運行「捆綁高管耙分貝:創建,」它看起來像耙子能夠找到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,Rake文件,並config.rb文件都在這裏我之前一篇:createdb not recognized as a command when using ActiveRecord

我認爲這個問題可能是在這裏的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: 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

但我不真的瞭解我的代碼意味着什麼。

回答

0

既然你是在Windows,則可能是該行的語法問題:

system("createdb #{DB_NAME} --username #{DB_USERNAME} -w --no-password && createdb #{TEST_DB_NAME} --username #{DB_USERNAME} -w --no-password") 

如果紅寶石使用默認的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... 

最後,如果問題仍然存在,那麼就必須在你的Postgres的二進制文件路徑之前它擊中道路上又createdb可執行文件。您可以試試system("path")並查看輸出內容,然後檢查這些目錄是否有衝突的createdb

+0

我剛纔也想過,你應該確保你的變量名都包含一些值,而且都不是空的。你可以在'system'調用之前設置一個var和output:'cmd =「createdb#{DB_NAME} --username#{DB_USERNAME} -w --no-password」;放cmd' – lilole

+0

我懷疑我需要打破系統()線,但是當我嘗試輸入您的建議更改時,它顯示了終端中等號的語法錯誤。它說等號是「意想不到的」。我認爲Windows可以採用&&,但我不知道「太多」參數意味着什麼。有沒有辦法找出最大的參數createdb可以採取? – user4992261

+0

語法錯誤,這是一個驚喜。什麼是完整的錯誤文本?你是什​​麼意思「在終端」?你說的對,Windows 7 cmd.exe似乎對'&&'很滿意,所以這會提示一些「錯誤」的'createdb'被調用。 – lilole

0

Rakefile「create」任務使用PostgreSQL中的createdb.exe。 system()接受createdb.exe的選項。這些選項在這些資源中描述:

對於這個特定的Rakefile中,選項標記的格式不正確,所以createdb.exe無法理解它所提供的命令行參數。具體而言,單選項標誌和雙選項標誌正在使用不正確地一起:

  • --username必須被設置爲等於一個值
  • -w和--no-密碼意思是相同的和是冗餘的。如果您要使用此選項標誌,則應該使用其中一個,但不能同時使用這兩個標誌。

系統()在這個Rake文件正確的語法是:

system("createdb #{DB_NAME} --username=#{DB_USERNAME} && createdb #{TEST_DB_NAME} --username=#{DB_USERNAME}") 

您可能能夠保持-w或--no-密碼標誌,但是如果繼續接收命令終端有關的錯誤命令行參數,如上所示完全刪除這兩個標誌,並讓命令終端向您詢問postgres服務器的密碼,就像它默認的那樣。

0

我剛剛在Windows 7機器上完成了這個任務。

正確的答案是:

system("createdb --no-password --username=#{DB_USERNAME} #{DB_NAME} && createdb --no-password --username=#{DB_USERNAME} #{TEST_DB_NAME} ") 

我得到這個從您的文章,並從閱讀dbcreate --help。爭論的順序錯誤;注意DB_NAME最後是作爲的最後一個參數之後的所有選項。