[英]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.