加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ruby-on-rails – 对于宝石与否,这就是问题所在

发布时间:2020-12-17 03:26:33 所属栏目:百科 来源:网络整理
导读:我正在Rails上构建一个简单的CMS,我正在考虑如何打包它,以便我可以轻松地在其他项目中重用它,并最终将其作为开源共享. 这让我想知道是否可以将它打包为一个宝石,包含视图,控制器,模型,图像,样式表等,然后只需将它添加到Gemfile中就可以将它包含在一个新站点
我正在Rails上构建一个简单的CMS,我正在考虑如何打包它,以便我可以轻松地在其他项目中重用它,并最终将其作为开源共享.

这让我想知道是否可以将它打包为一个宝石,包含视图,控制器,模型,图像,样式表等,然后只需将它添加到Gemfile中就可以将它包含在一个新站点中?

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

解决方法

发动机真棒!绝对看看杰米在答案中提供的链接……这是一个很好的起点.引擎是使用Rails 3的方法.我觉得它是框架最强大的功能之一,我将应用程序中的几乎所有常用功能转换为引擎.如果您要创建大量应用程序,IT可以为您节省大量时间.这是我创建引擎时的当前工作流程:

第1步:宝石安装珠宝商,如果你没有它.然后使用珠宝商创建一个空白宝石.

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

gem.files = FileList['lib/**/*.rb','[A-Z]*','lib/**/**/*'].to_a

第3步:将您的Rails应用程序结构 – app / controllers,app / views等…添加到gem中的顶级目录.您还可以在routes.rb中包含/ config目录,该目录将附加到主应用程序路径.

第4步:设置你的lib目录,如下所示:

/lib/your_engine_name.rb (require
engine.rb in this file and any other
files in lib that you need)
/lib/your_engine_name/
/lib/your_engine_name/engine.rb

第5步:向engine.rb添加代码:

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中要包含引擎的本地路径:

#Gemfile  
gem "your_engine_name",:require => "your_engine_name",:path => "/your_engines/your_engine_name"

第9步:捆绑安装并启动本地应用服务器.

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

第11步:将你的宝石源放在github上,这样你就可以在prod中使用它.利用珠宝商版本化rake任务.我结合了一些像这样的rake任务,以便在同一步骤中执行git push和tag,并将它们包含在引擎的Rakefile中:

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并引用版本标记:

gem 'your_engine_name',:git => 'git@github.com:yourusername/your_engine_name.git',:tag=>"v1.1.1"

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

如果您对此有任何问题,请告诉我.我正在写一篇博文来更详细地展示这一点,我可能遗漏了一些东西……现在就把它写在我的头顶上..

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读