首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >创业板还是不创业板,这是个问题。

创业板还是不创业板,这是个问题。
EN

Stack Overflow用户
提问于 2010-09-21 22:32:46
回答 2查看 198关注 0票数 5

我正在Rails上构建一个简单的CMS,我正在考虑如何将其打包,以便在其他项目中轻松重用,并最终将其作为开源共享。

这让我想知道是否有可能将它打包为gem,包含视图、控制器、模型、图像、样式表等,然后只需将gem添加到Gemfile中即可将其包含在新站点中。

我不知道这是否可能,但也许这里有人能帮我找出答案?

EN

回答 2

Stack Overflow用户

发布于 2010-09-21 23:57:22

引擎太棒了!当然,看看Jamie在他的answer..it中提供的链接就是一个很好的起点。引擎是Rails3的必由之路。我觉得它是框架中最强大的功能之一,我几乎把我应用程序中的所有常用功能都转换成了引擎。如果你正在创建大量的应用程序,它会为你节省大量的时间。以下是我在创建引擎时的当前工作流程:

第一步: gem install jeweler,如果你没有它的话。然后使用珠宝商创建一个空白宝石。

第2步:使用您的gem信息和任何依赖项更新珠宝商提供的Rakefile。您可能需要添加一个文件列表,以便gemspec可以指向正确的文件,并在构建它时删除任何不需要的文件。

代码语言:javascript
复制
gem.files = FileList['lib/**/*.rb','[A-Z]*', 'lib/**/**/*'].to_a

第3步:添加您的Rails应用程序结构-应用程序/控制器、应用程序/视图等。添加到gem中的顶级目录。您还可以包含routes.rb的/config目录,该目录将附加到您的主应用程序路由中。

步骤4:设置lib目录,如下所示:

/ lib /your_engine_name.rb (需要在此文件和lib中需要的任何其他文件中包含engine.rb ) /lib/your_engine_name/

/lib/your_engine_name/engine.rb

第5步:将代码添加到engine.rb:

代码语言:javascript
复制
 require 'your_engine_name'
 require 'rails'

 module YourEngineName    
  class Engine < Rails::Engine  
    #load rake tasks go here  
    #initializers go here     
  end
 end

第6步:将所有自定义引擎代码添加到app/*和lib/ your _ engine _name/

步骤7:使用"rake build“构建gem。您必须这样做,以便Bundler可以在第8步中的gemspec (在构建时生成)中看到您的文件

第8步:用于本地测试的引用要包含引擎的主应用程序的Gemfile中的本地路径:

代码语言:javascript
复制
#Gemfile  
gem "your_engine_name", :require => "your_engine_name", :path => "/your_engines/your_engine_name"

步骤9:包安装并启动您的本地应用服务器。

第10步:由于您引用的是本地路径,因此您可以更改gem并在主应用程序中查看它们,而无需重新构建(除非您需要向gemspec添加新文件)。

github第11步:将你的gem源代码放到github上,这样你就可以在中使用它。利用珠宝商对rake任务进行版本控制。我组合了一些这样的rake任务,以便在同一步骤中执行git推送和标记,并将它们包含在引擎的Rakefile中:

代码语言:javascript
复制
namespace :version do  
  desc "create a new version, create tag and push to github"  
  task :github_and_tag do  
    Rake::Task['github:release'].invoke  
    Rake::Task['git:release'].invoke  
  end  

  desc "bump patch push to github"  
  task :patch_release do  
    Rake::Task['version:bump:patch'].invoke  
    Rake::Task['version:github_and_tag'].invoke  
  end  

  desc "bump minor push to github"  
  task :minor_release do  
    Rake::Task['version:bump:minor'].invoke  
    Rake::Task['version:github_and_tag'].invoke  
  end  

  desc "bump major push to github"  
  task :major_release do  
    Rake::Task['version:bump:major'].invoke  
    Rake::Task['version:github_and_tag'].invoke  
  end  
end  

第12步:在部署到生产环境时,将Gemfile中的源代码更改为github,并引用版本标签:

代码语言:javascript
复制
gem 'your_engine_name', :git => 'git@github.com:yourusername/your_engine_name.git', :tag=>"v1.1.1"

我正在使用这个技巧来引用Gemfile中的两个gem源代码,直到他们将该功能添加到Bundler:http://www.cowboycoded.com/2010/08/10/using-2-sources-for-a-gem-in-different-environments-with-bundler/

如果您对此有任何问题,请告诉我。我正在写一篇博客文章,以更详细地展示这一点,我可能遗漏了一些东西。现在就把这个写在我的脑海里..

票数 4
EN

Stack Overflow用户

发布于 2010-09-21 22:38:36

把它包装成一个引擎宝石。

请参阅:http://www.themodestrubyist.com/2010/03/05/rails-3-plugins---part-2---writing-an-engine/

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3761371

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档