我目前正在将旧版 Rails 2.xx 应用程序迁移到 Rails 3.2。我通过将单体应用程序的特定部分分解为小型专用应用程序来做到这一点。我的麻烦在于代码重复。较小的应用程序将为一般布局、javascript 和 css 共享相同的客户端代码。如何打包布局和客户端代码,以便在单独的独立应用程序之间共享?我最初的猜测是这可以通过可安装的引擎来完成。但我不确定这是否是矫枉过正。
1 回答
我写了一篇博客http://blogs.pigrider.com/blogs/22来展示我如何逐步构建一个共享布局引擎,以便在 Rails 3.2 中的多个应用程序中使用。
浏览我的博客:
这篇博客展示了我如何构建一个 Rails 引擎来逐步在多个应用程序之间共享布局。我在这个博客中构建共享布局引擎的方式可能不是最好的。但是,我只想给那些仍在努力构建这种引擎的人提供一些线索。
我的引擎的名称是“PigderLayout”。运行命令 rails plugin new PigriderLayout --mountable -d mysql 创建一个新的引擎项目。这里我使用 -d mysql 因为我使用 MySQL 作为数据库。您可以更改它以适合您自己的数据库,并且不要忘记将相应的数据库 gem 添加到 Gemfile。我将 gem 'mysql2', '0.3.11' 放入我的 Gemfile 中。
为所有共享布局内容生成一个控制器。运行这个命令 rails generate controller main globalLayout aboutUs contactUs。在这里,我在这个主控制器中有三个动作。然后,编辑文件 config/routes.rb,让它看起来像:
PigriderLayout::Engine.routes.draw
匹配 "AboutUs"=>"main#aboutUs", :as=>:aboutUs
匹配 "ContactUs"=>"main#contactUs", :as=>:contactUs
end在目录 app/views/pigrider_layout/main 中,您现在应该看到三个视图文件。它们是 globalLayout.html.erb、aboutUs.html.erb 和 contactUs.html.erb。你可以在 aboutUs.html.erb 和 contactUs.html.erb 中写任何你想要的东西。在文件 globalLayout.html.erb 中,我写道:
……