如何将Rails 5 API应用程序转换为可以充当API和应用程序的rails应用程序?

Las*_*ser 18 ruby-on-rails rails-api ruby-on-rails-5

我最初使用--api标签在rails 5中创建它.

来自http://edgeguides.rubyonrails.org/api_app.html,

我删除了 config.api_only = true

我变了

class ApplicationController < ActionController::API
end
Run Code Online (Sandbox Code Playgroud)

class ApplicationController < ActionController::Base
end
Run Code Online (Sandbox Code Playgroud)

我现在遇到的问题是视图被渲染,例如.welcome/index.html.erb,相应的CSS文件assets/stylesheets/welcome.css.scss不是.

知道如何解决这个问题,或者更一般地将API应用程序转换为完整的应用程序?

谢谢!

Cal*_*way 21

我遇到了同样的问题,我相信我已经解决了.我希望找到一个简单的rails生成器来转换它,但除非我错过了一些东西并不那么容易.但是,rails确实比完全手动完成更容易.

关键是该rails new命令可以在现有应用程序上使用.请注意,此答案假设您知道如何使用git并在现有应用程序上使用它.

首先也是最重要的是,建立一个新的分支.这有两个功能,1)所以你不应该丢失你的工作,如果你搞砸了(虽然它可能是支持它的好时机,比如GitHub),2)所以你可以比较有的文件在此过程之后发生冲突并检索此过程覆盖的任何工作(对我来说并不重要,但这很重要).

在终端中,从您要从API更改为标准的应用程序目录.运行以下命令以上一个目录,然后让rails在现有目录上编写一个新项目.在最初创建应用时使用的第二个命令上使用相同的选项.例如,对于我,我[options]在下面替换了-d postgresql --skip-turbolinks --skip-spring -T因为这些是我在创建应用程序时使用的选项.我正在使用该--skip-bundle标志,因为它可能会更改你的Gemfile而不是你想要它,你可能想要在捆绑之前更改它的一部分.

$ cd ..
$ rails new your_app_name --skip-bundle [options] 
Run Code Online (Sandbox Code Playgroud)

现在rails将通过它为新应用程序创建所有文件的通常过程,但这次它几乎会跳过所有文件,因为它们已经存在.它会在每一个存在冲突的地方停止,而这就是你需要逐个分析冲突的地方.

以下是冲突文件对我有用的内容:

  1. 提交d他们每个人,看看差异.
  2. 如果差异只是添加行,那么允许它Y.这就是我们毕竟这样做的原因.
  3. 如果差异只是删除代码,则拒绝它n.
  4. 如果差异是添加和删除代码,请记下该文件以在此过程之后返回.然后接受它Y.

完成此操作后,使用git检查(4)您记下的每个文件的差异.你想要保留rails添加的更改,但是你可能希望复制它删除的所有代码.这可能包括Gemfile.

一个值得注意的区别是rails将应用程序控制器从继承更改ActionController::APIActionController::Base.我想要一个控制器,所以我创建了一个新的文件`app/controllers/api_controller.rb'.然后我将原始ApplicationController中的内容复制到新文件中,并将类名更改为ApiController.然后我将所有现有的API控制器更改为从新的ApiController而不是ApplicationController继承.

完成后,运行bundle install以安装添加到应用程序中的gems rails.

这对我有用.我希望它有所帮助.祝好运!


Mic*_*ant 6

从 api 应用程序之外的目录(例如其父 - cd ..)我会做

rails new comparison_real_app
Run Code Online (Sandbox Code Playgroud)

然后将 的内容comparison_real_app与您的应用程序进行比较,并将丢失的文件复制到 api 应用程序中,并根据需要更改任何其他文件。

  • 注意:您可以使用 `meld`(或其他 GUI 工具)来获取两个文件夹之间的差异,并根据具体情况合并更改。 (2认同)

Las*_*ser 1

因此,随着我(您)的进行,可能需要做更多的事情,但要解决样式表的问题,您需要手动创建views/layouts/application.html.erbassets/stylesheets/application.css文件。