2013-04-03 110 views
0

使用Ruby on Rails的我正在開發使用Ruby on Rails的Web應用程序和一個Linux(Ubuntu的)服務器上運行它。我的後端處理基於Windows .bat文件,該文件基於約5個參數列表調用其他.bat文件的網絡。運行Windows批處理文件通過葡萄酒在Linux中

所以基本上,我試圖通過調用酒命令行的喜好初始批處理文件在我的Rails應用程序。

例如,這類似於我用來在Ubuntu終端成功運行代碼:

wine cmd.exe /C InitialCallFile.bat Directory/Input.xml Directory/Output.xml param1 param2 

我試圖在Ruby中的系統和%x的命令來調用它。例如:

System "wine cmd.exe /C InitialCallFile.bat self.infile self.outfile self.param1 self.param2" 
system wine cmd.exe InitialCallFile.bat [self.infile, self.outfile, self.param1, self.param2] 
%x[wine cmd.exe /C InitialCallFile.bat self.infile self.outfile self.param1 self.param2] 

和其他類似的變化

然而,該方案不承認cmd,然後回來與錯誤: 未定義的局部變量或方法'加利福尼亞」

我應該如何使用Ruby on Rails正確調用葡萄酒中的應用程序?

+1

在Ubuntu服務器上調用運行在Wine下的批處理文件聽起來不是一個好主意。也許你應該將這些批處理文件重寫爲shell或Ruby腳本? – Blender

+0

由於成本差異,我被Ubuntu服務器卡住了。我考慮重寫批處理文件,但是其中有相當數量的文件,並且需要一些不重要的工作量。因此,如果有方法通過Ubuntu上的Wine調用它們(即使它可能不是最好的設計),那麼現在可以作爲一個快速修復。然後,我可以回去,並在一段時間內轉換它們 – user2238231

+0

我會將bat文件轉換爲sh語法 –

回答

0

您應該能夠使用system(注意下殼體s),優選在多參數形式:

system 'wine', 'cmd.exe', '/C', 'InitialCallFile.bat', self.infile, self.outfile, self.param1, self.param2 

注意,常數部分是字符串文字而作爲可變部分(例如self.infile )是方法調用,所以它們沒有被引用。

你也可以使用字符串插值來構建命令,但這是一個非常糟糕的主意,我不會爲您展示如何鼓勵壞習慣。

+0

謝謝,這個稍作修改: 'system'wine','cmd.exe','/ C',@batch_file,self.infile,self.outfile,self.param1,self.param2' 批處理文件實際上必須存儲在一個變量中,否則會返回一個「語法錯誤,意外的tlVAR,期待kEND」 – user2238231