我正在开发一个Rails 4.1.13可安装引擎,并试图利用它的命名空间功能,特别是当涉及到视图时。
我正在尝试使用Bootstrap
来装扮我的引擎视图,更具体地说是使用twitter-bootswatch-rails
gem。
在gem提供的生成器中,我成功运行了一个:rails g bootswatch:install sunrise
,它将生成相应的文件,即使它们不会真正按我的引擎名称命名。更改$engine_name/layouts/application.html.haml
中的文件名就行了。
然而,忽略引擎命名空间的行为导致其他gem生成器吐出类似这样的错误:
$> rails g bootswatch:themed Datasets
$engine_name/vendor/bundle/ruby/2.2.0/gems/twitter-bootswatch-rails-3.3.4.0/lib/generators/bootswatch/themed/themed_generator.rb:91:in `ext': undefined method `config' for nil:NilClass (NoMethodError)
themed_generator的第91行正试图找出::Rails.application
正在使用的模板生成器,但它认为这是nil
我的engine.rb
文件如下:
module Meticulous
class Engine < ::Rails::Engine
isolate_namespace Meticulous
config.generators do |g|
g.test_framework :rspec, fixtures: false
g.fixture_replacement :factory_girl, dir: 'spec/factories'
g.assets true
g.helpers true
end
config.app_generators do |g|
g.template_engine :haml
g.stylesheet_engine :less
end
config.assets.precompile += %w( sunrise.css sunrise.js )
end
end
有人对此问题有任何经验吗?
答案 0 :(得分:0)
我遇到了同样的麻烦......看起来它不是设计用于在引擎内工作的宝石:-(我只是做了一个肮脏的工作。
就我而言,问题在于生成布局。这是同样的错误,但使用不同的生成器:
rails g bootswatch:layout simplex
我刚使用sublimetext打开gem中的文件:
subl /home/alfricomoros/.rvm/gems/ruby-2.2.3@rails-4.2.4/gems/twitter-bootswatch-rails-3.3.4.0/lib/generators/bootswatch/layout/layout_generator.rb
暂时我在方法中做了以下更改:
def generate_layout
app = ::Rails.application
# ext = app.config.generators.options[:rails][:template_engine] || :erb
ext = :erb
template "layout.html.#{ext}", "app/views/layouts/#{theme_name}.html.#{ext}", {theme_name: theme_name, app_name: application_name}
end
我没有像haml那样使用模板库..只是erb。
然后在sublime文本上按Ctrl + S保存更改并重试命令。我得到命令正常工作:
~$ rails g bootswatch:layout simplex
create app/views/layouts/simplex.html.erb
~$
然后,撤消文件中的更改并再次保存以免弄乱gem。关闭你的崇高。