标签: rails-engines

Rails 3.1:引擎与可安装应用程序

有人可以帮我理解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

119
推荐指数
4
解决办法
3万
查看次数

Ruby on Rails 3 - 为每个请求重新加载lib目录

我正在为rails 3应用程序创建一个新引擎.您可以猜到,此引擎位于我的应用程序的lib目录中.

但是,我在开发它时遇到了一些问题.实际上,每次我更改引擎中的内容时,我都需要重新启动服务器.

有办法避免这种情况吗?

我可以强制rails完全重新加载lib目录或特定文件以及他对每个请求的要求吗?

谢谢你的帮助 :)

ruby-on-rails reload rails-engines ruby-on-rails-3

58
推荐指数
4
解决办法
2万
查看次数

Rails引擎 - Gems依赖项,如何将它们加载到应用程序中?

我在这里做引擎,它可以独立工作.

当我将它转换为gem并将其加载到另一个应用程序中时,我得到了许多未定义的错误,来自我的引擎gem的依赖.

这是gemspec:

s.add_dependency('paperclip')
s.add_dependency('jquery-rails')
s.add_dependency('rails3-jquery-autocomplete')
s.add_dependency('remotipart')
s.add_dependency('cancan')
Run Code Online (Sandbox Code Playgroud)

在应用程序中,当我进行bundle安装时,它列出了所有这些依赖项,但是当我运行应用程序时,我收到了很多未定义的方法错误(例如来自paperclip的has_attachment).似乎应用程序不加载引擎依赖项.这是默认行为吗?我可以改变吗?引擎内部的插件也发生了同样的事情.

如果我手动插入那些宝石,在应用程序Gemfile中,所有工作......

gem dependencies rails-engines ruby-on-rails-3

47
推荐指数
2
解决办法
2万
查看次数

Rails引擎中的迁移?

我有多个rails应用程序与同一个后端交谈,我希望他们分享一些迁移.
我设置了一个rails引擎(带有enginex),我可以共享任何东西(控制器,视图,模型......)但没有迁移.我做不到!

我尝试创建一个文件db/migrate/my_migration.rb,但在我的主应用程序中,如果我这样做:

  rake db:migrate
Run Code Online (Sandbox Code Playgroud)

它不加载它们.

经过一番Google上搜寻它似乎有一些最近的工作在这,似乎已经合并轨主.我用rails 3.0.3你有没有办法让这个工作?

谢谢 !

ruby-on-rails rails-engines ruby-on-rails-3

37
推荐指数
6
解决办法
2万
查看次数

使用Rspec测试Rails 3.1可安装引擎

我开始制作Rails 3.1引擎,我很难用rspec测试它.

首先,如果我运行rails g integration_test whatever它会在测试/集成中创建一个常规的集成测试而不是spec/requests(rspec-rails gem被安装并作为gemspec文件中的开发依赖项而需要)

此外,当我运行规范测试时,我得到一个错误,说明与我正在测试的模型相对应的表尚未创建.我尝试rake engine_name:install:migrationsrake db:migrate从虚拟应用程序内部运行,我得到一个"表已存在"错误.

一切似乎都断开了,我觉得我在这里遗漏了一些东西,使rspec gem无缝地工作,就像通常使用完整的rails应用程序一样.

我从http://rubyx.com/2011/03/01/start-your-engines跟踪了所有更改,我可以通过控制台启动虚拟应用程序手动测试引擎,如http:// railscasts所示. com/episodes/277-mountable-engines.

有没有办法让rspec成为测试rails 3.1引擎的默认设置?

rspec ruby-on-rails rails-engines rspec-rails ruby-on-rails-3.1

37
推荐指数
2
解决办法
1万
查看次数

已安装的导轨引擎中的命名路由

我正在制作一个小型轨道引擎,我这样安装:

mount BasicApp::Engine => "/app"
Run Code Online (Sandbox Code Playgroud)

使用这个答案,我已经验证了引擎中的所有路由都应该是:

但是 - 当我(在引擎内)链接到命名路由(在引擎内定义)时,我收到此错误

undefined local variable or method `new_post_path' for #<#<Class:0x000000065e0c08>:0x000000065d71d0>
Run Code Online (Sandbox Code Playgroud)

运行"rake route"清楚地验证"new_post"应该是一个命名路径,所以我不知道为什么Rails(3.1.0)无法解决它.欢迎任何帮助

我的config/route.rb(对于引擎)看起来像这样

BasicApp::Engine.routes.draw do
  resources :posts, :path => '' do
                resources :post_comments
                resources :post_images
        end
end
Run Code Online (Sandbox Code Playgroud)

我应该补充说它是和孤立的引擎.但是,像main_app.root_path这样的路径工作正常 - 而root_path却没有

mount ruby-on-rails named-routing rails-engines ruby-on-rails-3

36
推荐指数
2
解决办法
2万
查看次数

在应用程序布局中渲染引擎

背景

我正在创建一个由核心和几个模块组成的应用程序.这些模块是rails引擎,并提供实际功能,因为核心本身仅充当主机.引擎托管/lib在各自的路径上并安装在它们各自的路径上.

coreApp
???lib
   ??? module1
   ??? module2
   ??? etc
Run Code Online (Sandbox Code Playgroud)

然后像这样安装模块

mount Module1::Engine => "/module1", :as => "module1"
mount Module2::Engine => "/module2", :as => "module2"
Run Code Online (Sandbox Code Playgroud)

虽然登录本身是由模块完成的,但核心也负责处理会话.

问题

我还没有找到一种与引擎共享核心应用程序布局的好方法.截至目前,这就是我如何使布局可用于引擎:

coreApp
??? app
    ??? views
        ??? layouts
            ??? application.html.erb
            ??? core.html.erb
Run Code Online (Sandbox Code Playgroud)

该文件core.html.erb仅包含

<%= render :template => 'layouts/application' %>
Run Code Online (Sandbox Code Playgroud)

然后是这样包含在每个模块中

module Module1
  class ApplicationController < ActionController::Base
    layout "core"
  end
end
Run Code Online (Sandbox Code Playgroud)

虽然它不是特别优雅,但它工作正常,并且模块的内容呈现在yield应用程序布局中的语句所在的位置.

问题如下:

1.标题中不包含模块特定的样式表

我需要一种方法来包含活动模块的样式表.

2.标头需要访问有关登录用户的信息

标题包含有关登录用户的信息,例如

Logged in as <%= @user[:realname] %>
Run Code Online (Sandbox Code Playgroud)

这来自核心 home_controller

def index
  @user …
Run Code Online (Sandbox Code Playgroud)

ruby-on-rails-plugins rails-engines ruby-on-rails-3

30
推荐指数
3
解决办法
1万
查看次数

Ruby On Rails中铁路和引擎之间的差异3

我读了一些关于这些论点的文件,但我不清楚它们是什么,它们之间有什么区别,如果其中一个符合我的需要.

我需要编写一个可插入其他应用程序的应用程序,并希望将其作为gem包含在其他应用程序中.基本上我需要一些模型,一个控制器和没有视图,加上一些初始化,支持来自托管应用程序和生成器的配置参数.

我是正确的吗?

我应该阅读什么才能理解如何做到这一点?

更新:

有很多细节AF一个很不错的文章,可以发现在这里.

实质上:

Railtie是Rails框架的核心,它提供了几个钩子来扩展Rails和/或修改初始化过程.

Rails :: Engine只不过是一个已经设置了一些初始化程序的Railtie.由于Rails :: Application和Rails :: Plugin是引擎,因此这里描述的相同配置可以在所有三个中使用.

ruby-on-rails-plugins rails-engines ruby-on-rails-3 railtie

28
推荐指数
2
解决办法
5232
查看次数

Rails 3.1:在客户端应用程序中公开引擎助手的更好方法

我发现了一些文章解决了引擎内的助手问题,这些问题不适用于消费(父)应用程序.为了确保我们都在同一页上,让我们说我们有这个:

module MyEngine
  module ImportantHelper
    def some_important_helper
      ...do something important...
    end
  end
end
Run Code Online (Sandbox Code Playgroud)

如果您查看"隔离引擎的助手"(L293)中的rails引擎文档,它会说:

  # Sometimes you may want to isolate engine, but use helpers that are defined for it.
  # If you want to share just a few specific helpers you can add them to application's
  # helpers in ApplicationController:
  #
  # class ApplicationController < ActionController::Base
  #   helper MyEngine::SharedEngineHelper
  # end
  #
  # If you want to include all of the engine's helpers, you can use #helpers …
Run Code Online (Sandbox Code Playgroud)

ruby-on-rails view-helpers helpers rails-engines ruby-on-rails-3.1

25
推荐指数
3
解决办法
9387
查看次数

如何在.gemspec文件中将本地gem的依赖项添加到rails插件/引擎

我试过这样的方式:

 s.add_dependency 'gem', :path => '../gem'
Run Code Online (Sandbox Code Playgroud)

喜欢添加gem gemfile,但它不起作用,并会导致此错误:

/Users/chenqh/.rvm/rubies/ruby-1.9.3-p194/lib/ruby/site_ruby/1.9.1/rubygems/requirement.rb:81:in `parse': Illformed requirement 
Run Code Online (Sandbox Code Playgroud)

plugins dependencies ruby-on-rails rails-engines gemspecs

24
推荐指数
3
解决办法
2万
查看次数