我不确定这种事情是否很常见,但我一直在尝试创建只是围绕 Rails 应用程序包装的 gem。
我的 gem 将有一个生成器来创建一个config.ru
,但 Rails 应用程序将位于 gem 的 lib 目录中。我需要知道如何“嵌入”一个 Rails 应用程序并对其进行配置,以便它可以在 gem 中运行。
例如:
$ mygem new project
mygem created a directory called "project" with the following files:
project/config.ru
project/widgets/
project/foobars/
我的 gem 还将生成一些需要以某种方式添加到 Rails 的目录,以便我可以从 Gem 中的 Rails 应用程序访问这些目录中的代码。
您能给我的任何帮助或建议将不胜感激。
澄清一下,我并不是要创建 Rails 引擎或 Rails 应用程序的插件。我正在尝试创建一个成熟的 Rails 应用程序,但将其打包为 gem,以便我的 gem 的用户可以运行 gem(rails 应用程序),而无需知道它在幕后使用 Rails。
更新:好的,我现在有一点工作。我已经创建了 gem 并在 gem 的 lib 目录中生成了 rails 项目。
$ bundle gem my_gem && cd my_gem/lib
$ rails new my_gem --skip-bundle
这给我留下了:
my_gem/
my_gem.gemspec
bin/my_gem
lib/
my_gem.rb
my_gem/
version.rb # generated by bundler
# the rails app:
app/
config/
Gemfile
...etc
由于这个 gem 需要 Rails,我开始将 Rails Gemfile 中定义的 gem 作为依赖项添加到 gem 的 Gemspec 中,但我对如何处理assets
Gemfile 中的组有点困惑。
# Rails Gemfile
group :assets do
gem 'sass-rails', '~> 3.2.3'
gem 'coffee-rails', '~> 3.2.1'
gem 'therubyracer', :platforms => :ruby
gem 'uglifier', '>= 1.0.3'
end
# gemspec
Gem::Specification.new do |gem|
gem.name = "my_gem"
# ...
gem.add_dependency 'rails', '3.2.8'
gem.add_dependency 'sqlite3'
gem.add_dependency 'jquery-rails'
# how to add the assets group gems?
end