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

我最初使用–api标签在rails 5中创建它。

来自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应用程序转换为完整的应用程序?

谢谢!

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

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

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

在终端中,从要更改的应用程序目录仅从API更改为标准。 运行以下命令以上一个目录,然后让rails在现有目录上编写一个新项目。 在最初创建应用时使用的第二个命令上使用相同的选项。 例如,对我来说,我用-d postgresql --skip-turbolinks --skip-spring -T替换了[options] -d postgresql --skip-turbolinks --skip-spring -T因为这些是我在创建应用程序时使用的选项。 我正在使用--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::APIinheritance到ActionController::Base 。 我想要一个控制器,所以我创建了一个新文件`app / controllers / api_controller.rb’。 然后我将原始ApplicationController中的内容复制到新文件中,并将类名更改为ApiController。 然后我将所有现有的API控制器更改为从新的ApiControllerinheritance而不是从ApplicationControllerinheritance。

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

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

从api应用程序之外的目录(例如它的父 – cd .. )我会这样做

 rails new comparison_real_app 

然后将comparison_real_app的内容与您的应用comparison_real_app ,并复制api应用程序中缺少的文件,并根据需要更改任何其他文件。

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