2013-10-09 93 views
-1

我有Rails 4應用程序。我創建了簡單的C擴展與Ruby C API 該擴展轉換文件從data文件夾,並返回基於該文件輸出(some_file.f如何將Ruby C擴展添加到Rails應用程序中?

|-- data 
| |--some_file.f 
|-- ext 
| `-- my_ext 
|  |-- extconf.rb 
|  |-- some_lib.c 
|  `-- my_ext.c 
|-- lib 

現在,當我想使用的擴展我需要在my_ext目錄運行以下命令

ruby extconf.rb 
make 

然後,我有更多的.o.bundle編譯過的文件。我也創建了初始化與require 'my_ext/my_ext'

  1. 我應該在哪裏移動這些文件?進入lib/my_ext

  2. 有沒有辦法改善編譯過程並更好地組織編譯好的文件? 將來我想添加測試並在擴展編譯後運行它們。 也許我應該從那個擴展中創建一個gem?或耙任務?

  3. 我讀了http://tenderlovemaking.com/2009/12/18/writing-ruby-c-extensions-part-1.html本教程,但如何在Rails應用程序中實現? Rakefile放在哪裏?

+0

您可以使用'rake-compiler' gem添加一個rake任務,將它傳遞給它一些細節,以便它知道在哪裏可以找到extconf,以及在何處放置擴展。不確定項目的設置與寶石相反,因此不是一個完整的答案,但你想要的是絕對有可能的。 –

+0

但是Rake應用程序中Rake-compiler文檔的Rakefile放在哪裏? – tomekfranek

回答

1

我只是看看你的擴展打包成一個獨立的rubygem。然後你可以將它添加到你的Gemfile中,讓軌道處理所有事情。創建一個帶有擴展名的寶石比用ruby創建一個寶石還要多一點,但this guide可以很好地完成。如果你想保持寶石私密性,你應該檢查出this tutorial。除了rubygems.org之外,您還需要修改Gemfile以在您的服務器上搜索元數據,或者您正在查看的任何位置。

如果您開始嘗試自己手動管理擴展,您可能會遇到很多棘手的情況,例如需要使用配置選項--enable-shared set進行ruby構建(以允許您鏈接到共享對象帶有基本的require語句),或者不得不重新啓動整個rails應用程序以查看lib /目錄中的任何更改(假設這是您手動添加擴展的位置)。過去我被這兩個人咬了一口,從那以後就轉向爲這類東西創建私人寶石,因爲寶石安裝過程非常簡單。

相關問題