2016-04-16 121 views
10

我最初使用--api標籤在rails 5中創建它。如何將Rails 5 API應用程序轉換爲可充當API和應用程序的Rails應用程序?

http://edgeguides.rubyonrails.org/api_app.html

我刪除config.api_only = true

我改變

class ApplicationController < ActionController::API 
end 

class ApplicationController < ActionController::Base 
end 

我現在遇到的問題是當視圖是越來越呈現,恩。 welcome/index.html.erb,相應的CSS文件assets/stylesheets/welcome.css.scss不是。

任何想法如何解決這個問題,或者更一般地說,將API應用程序轉換爲完整的應用程序?

謝謝!

+3

更新並刪除'後'部分。它最初從來不是一個普通的rails應用程序,它最初是一個api應用程序。 –

回答

1

因此,我可能需要完成更多的事情,但要解決此問題,您需要手動創建views/layouts/application.html.erbassets/stylesheets/application.css文件。

3

從API的應用程序之外的目錄(如其父 - cd ..)我會做

rails new comparison_real_app 

,然後comparison_real_app的內容與應用比較並複製了那個丟失到文件api應用程序並根據需要更改任何其他文件。

+0

注意:您可以使用'meld'(或其他GUI工具)在兩個文件夾之間獲取差異,並根據具體情況合併更改。 –

7

我遇到了同樣的問題,我相信我已經解決了它。我希望找到一個簡單的軌道生成器來轉換它,但除非我錯過了一些東西,這並不容易。但是,軌道確實比完全手動完成更容易。

關鍵是rails new命令可用於現有的應用程序。請注意,這個答案假設你知道如何使用git並在現有應用程序中使用它。

首先也是最重要的是,建立一個新的分支。這有兩個功能,1)如果你搞砸了,你不應該失去你的工作(雖然現在可能是備份它的好時機,比如GitHub),2)所以你可以比較那些擁有在這個過程之後發生衝突並且檢索這個過程覆蓋的任何工作(這對我來說並不多,但它很重要)。

在終端中,從應用程序的目錄中,您要從API更改爲標準。運行以下命令以建立一個目錄,然後讓rails在現有目錄上寫入一個新項目。在最初創建應用程序時使用的第二個命令上使用相同的選項。例如,對於我,我用-d postgresql --skip-turbolinks --skip-spring -T替換了以下[options],因爲這些是我在創建應用程序時使用的選項。我正在使用--skip-bundle標誌,因爲它可能會比您想要的更改您的Gemfile,並且您可能想在捆綁之前將其更改一些。

$ cd .. 
$ rails new your_app_name --skip-bundle [options] 

現在Rails是要去通過它的創建所有文件的新應用程序的常規工藝,但是這一次它會跳過幾乎所有的人,因爲他們已經在那裏。它會停止在每一個有衝突的地方,這就是你需要逐一分析衝突的地方。

這裏是爲我工作在有衝突的文件:

  1. 對他們中的每一個提交d看到的差異。
  2. 如果差異只是添加行,則允許使用y。這就是我們爲什麼要這樣做的原因。
  3. 如果區別只是刪除代碼,然後拒絕它與n
  4. 如果不同之處在於添加和刪除代碼,請記下該文件以便在此過程之後返回。然後用y接受它。

完成此操作後,使用git檢查(4)中記錄的每個文件的差異。您需要保留rails添加的更改,但是您可能需要複製它移回的所有代碼。這可能包括Gemfile。

一個值得注意的區別是,rails會將應用程序控制器從ActionController::API更改爲ActionController::Base。我需要一個控制器,所以我創建了一個新文件「app/controllers/api_controller.rb」。然後我將原來的ApplicationController中的內容複製到新文件中,並將類名更改爲ApiController。然後,我將所有現有的API控制器都從新的ApiController繼承,而不是從ApplicationController繼承。

完成後,運行bundle install安裝添加到應用程序中的gems rails。

這對我有用。我希望它有幫助。祝你好運!

相關問題