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

时间:2016-04-16 21:27:11

标签: 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

class ApplicationController < ActionController::Base
end

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

我知道如何解决这个问题,或者更常见的是将API应用程序转换为完整的应用程序?

谢谢!

3 个答案:

答案 0 :(得分:19)

我遇到了同样的问题,我相信我已经解决了。我希望找到一个简单的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] 

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

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

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

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

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

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

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

答案 1 :(得分:4)

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

rails new comparison_real_app

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

答案 2 :(得分:1)

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