有人可以帮我理解Rails引擎和可安装应用程序之间的差异吗?在Rails 3.1中,您可以使用"rails new plugin _ __ "命令创建任一个.
rails plugin new forum --full # Engine
rails plugin new forum --mountable # Mountable App
Run Code Online (Sandbox Code Playgroud)
你什么时候想要使用一个?我知道你可以将Engine打包成一个宝石.可安装应用程序的情况不是这样吗?还有什么其他差异?
ruby-on-rails-plugins rails-engines ruby-on-rails-3 ruby-on-rails-3.1
我正在开发一个可安装的引擎,用于Rails 3.1,我想列出引擎的路由.
我用以下方法创建了引擎:
$ rails plugin new rails_blog_engine --mountable
Run Code Online (Sandbox Code Playgroud)
编辑'test/dummy/config/routes'文件阅读:
Rails.application.routes.draw do
mount RailsBlogEngine::Engine => "/blog"
end
Run Code Online (Sandbox Code Playgroud)
...和'config/routes'读取:
RailsBlogEngine::Engine.routes.draw do
resources :posts
end
Run Code Online (Sandbox Code Playgroud)
我想列出为':posts'生成的路线,但目前尚不清楚我是如何做到这一点的.当我运行'rake app:routes'时,我只获得"/ blog"路线:
$ rake app:routes
rails_blog_engine /blog {:to=>RailsBlogEngine::Engine}
Run Code Online (Sandbox Code Playgroud)
当我运行'rake routes'时,我收到一个错误:
$ rake routes
rake aborted!
Don't know how to build task 'routes'
Run Code Online (Sandbox Code Playgroud)
我怎样才能看到':posts'的路线?我可以不重写相关的rake任务吗?
routes ruby-on-rails rails-routing rails-engines ruby-on-rails-3.1
如果这个问题有点主观,我道歉...我正在试图找出用黄瓜和Rspec测试Rails 3引擎的最佳方法.为了测试发动机,需要使用导轨3 app.这是我目前正在做的事情:
通过运行以下命令将rails测试应用添加到gem(myengine)的根目录: rails new /myengine/rails_app
/myengine/rails_app/features像在普通的Rails应用程序中一样添加Cucumber
需要Rails Engine Gem(使用:path=>"/myengine")in/myengine/rails_app/Gemfile
将spec添加到gem的根目录: /myengine/spec
包括夹具,/myengine/spec/fixtures我将以下内容添加到我的cuc env.rb中:
env.rb:
Fixtures.reset_cache
fixtures_folder = File.join(Rails.root, 'spec', 'fixtures')
fixtures = Dir[File.join(fixtures_folder, '*.yml')].map {|f| File.basename(f, '.yml') }
Fixtures.create_fixtures(fixtures_folder, fixtures)
Run Code Online (Sandbox Code Playgroud)
你看到这样设置有什么问题吗?测试运行正常,但我有点犹豫要把功能放在测试轨应用程序中.我最初尝试将这些功能放在gem的根目录中,并且我在里面创建了测试rails应用程序features/support,但由于某些原因,当我运行测试时我的引擎不会初始化,即使我可以看到应用程序在cuc运行时加载其他所有内容.
如果有人正在使用Rails Engines并使用cuc和rspec进行测试,我将有兴趣听听您的设置.
**更新
自从我写这个问题以来,我改变了我的设置.我决定摆脱引擎根目录下的spec目录.现在我只创建一个名为"test_app"的rails应用程序,并在该应用程序中设置cuc和rspec,就像我通常在rails应用程序中所做的那样.然后我像上面步骤#3中那样包含宝石.由于引擎是一个子应用程序,我想它最好测试它就像一个普通的rails应用程序.如果有人有不同的设置,我仍然有兴趣听到.
routes ×1