我正在构建一个简单的CMS on Rails,我在考虑如何打包它,以便我可以在其他项目中轻松地重用它,并最终以开源方式共享它。对于宝石还是不是,这就是问题
这让我想知道是否有可能将它作为gem打包,包含视图,控制器,模型,图像,样式表等等,并且以后只需将gem添加到Gemfile中就可以将它包含在新的站点中?
我不知道这是否可能,但也许有人在这里可以帮我找出?
我正在构建一个简单的CMS on Rails,我在考虑如何打包它,以便我可以在其他项目中轻松地重用它,并最终以开源方式共享它。对于宝石还是不是,这就是问题
这让我想知道是否有可能将它作为gem打包,包含视图,控制器,模型,图像,样式表等等,并且以后只需将gem添加到Gemfile中就可以将它包含在新的站点中?
我不知道这是否可能,但也许有人在这里可以帮我找出?
引擎是真棒!肯定看看杰米在他的回答中提供的链接,这是一个很好的起点。引擎是Rails 3的方式。我觉得它是框架最强大的功能之一,我将应用程序中的几乎所有常见功能转换为引擎。如果您正在创建大量应用程序,IT可为您节省大量时间。这是我创建引擎时的当前工作流程:
第1步:gem install jeweler
如果您没有它。然后用珠宝商创建一个空白的宝石。
第2步:更新珠宝商提供的Rakefile与您的宝石信息和任何依赖关系。您可能需要添加一个文件列表,以便gemspec指向正确的文件,并排除您构建时不需要的任何文件。
gem.files = FileList['lib/**/*.rb','[A-Z]*', 'lib/**/**/*'].to_a
第3步:添加您的Rails应用程序结构 - 应用程序/控制器,应用程序/视图等。在宝石的顶级目录。您也可以在您的routes.rb中包含/ config目录,并将其添加到您的主要应用程序路线中。
第4步:设置您的lib目录是这样的:
/lib/your_engine_name.rb(需要 engine.rb在此文件中的任何其他 文件lib中,你需要) /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:添加所有的自定义引擎代码的应用程序/ *和lib/your_engine_name/
第7步:使用 “Rake构建” 建设创业板。你必须这样做,所以捆扎机可以看到你的文件在gemspec(当你建立其生成)的步骤#8
第8步:本地测试引用主应用程序的Gemfile中的本地路径,你要包括发动机:
#Gemfile
gem "your_engine_name", :require => "your_engine_name", :path => "/your_engines/your_engine_name"
步骤9:捆绑安装和启动本地应用服务器。
步骤10:既然你引用的本地路径,你可以更改创业板和看到他们在你的主要应用,而无需重建(除非您需要添加新的文件到gemspec)
第11步:把你的宝石来源放在github上,这样你就可以在产品中使用它。利用珠宝商版本化耙子任务。我结合一些这样的耙任务,以做到在同一步骤git的推动和标签,并将其包含在发动机的Rake文件:
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 => '[email protected]:yourusername/your_engine_name.git', :tag=>"v1.1.1"
我使用这个技巧来引用的Gemfile 2名宝石的来源,直到他们添加功能捆扎机: http://www.cowboycoded.com/2010/08/10/using-2-sources-for-a-gem-in-different-environments-with-bundler/
如果您有任何问题,请告诉我。我正在写一篇博客文章来更详细地展示这一点,我可能已经遗漏了一些东西......现在就写下我的头顶上。
非常感谢这个答案和你投入它的时间!真棒! – Erik 2010-09-21 16:49:16
有趣!我会看看它。干杯! – Erik 2010-09-21 16:45:42