2009-01-25 56 views
1

對於RoR安裝,有什麼方法可以在沒有root訪問權限的情況下運行rake命令?運行耙子沒有外殼訪問?

換句話說,有什麼辦法可以讓db:createdb:migrate在沒有root權限的情況下運行(可能是自動或其他)?或者我可以從RoR controller運行rake命令嗎?

回答

4

看看rails-2.X.X/lib/tasks/databases.rake,你可以看到創建,刪除和遷移數據庫的代碼。

一旦rails環境被初始化,您可以使用rake任務文件中的代碼來創建,刪除和遷移。

我不知道在出現錯誤之前,您是否可以在控制器級別執行此操作,但您可以隨時嘗試。您也可以在rails完成環境文件初始化後執行此操作。

config/environment.rb

... 

ActiveRecord::Migration.verbose = false 
ActiveRecord::Migrator.migrate(File.join(Rails.root, 'db', 'migrate')) 
0

好吧,這是一個雞雞蛋問題,你可以在沒有創建數據庫的情況下啓動你的RoR實例,但我懷疑它。如果您的託管服務提供商能夠託管RoR應用程序,則必須有方法讓他們爲您運行rake或讓您以某種方式運行它。

+0

我會檢查一下。我認爲RoR實例可能在沒有創建數據庫的情況下啓動,事實上...只要我不呼叫需要它的控制器... – 2009-01-26 00:17:19

+0

不,沒有問題,您可以在沒有創建數據庫的情況下啓動RoRT正在運行... – 2009-01-26 03:18:37

0

既然它聽起來像你遇到了創建數據庫的麻煩,有沒有辦法從主機控制面板來做到這一點?不過,你將如何遷移你的數據庫?聽起來你可能需要看一個新的主機。我使用Slicehost,並認爲他們是偉大的:)

+0

謝謝斯科特。創建數據庫沒有問題,也沒有使用MySql轉儲腳本等進行遷移,但我寧願不要打擾... – 2009-01-26 01:05:40

0

給這個代碼試試:

require 'rake' 
require 'rake/testtask' 
require 'rake/rdoctask' 
require 'tasks/rails' 
Rake::Task["db:version"].invoke 

我只是試圖在./script/console和工作。如果沒有require行,它將無法正常工作。

我使用它從rake任務調用其他rake任務(當它不是預請求時,而是必須在中間發生時)。

請注意,這將不會得到任何命令的輸出。如果你想,你可以只去好老反引號和運行這樣的命令:

output = `rake db:version` 

那將啓動另一個過程,但我不認爲有問題這一點。

0

要說清楚的是,您不需要root訪問權限,只需要shell(ssh)對該機器的訪問權限即可。

如何在沒有訪問權的情況下部署它?如果您使用的是capistrano,而您已經擁有shell訪問權限,並且可以爲您運行這些任務。