标签: rails-engines

如何调试rails 3 gem?

我已经基于本教程创建了一个gem /引擎:

http://www.themodestrubyist.com/2010/03/05/rails-3-plugins---part-2---writing-an-engine/

但是,在尝试在新创建的应用程序中使用gem时出现错误.我试图访问应用程序时得到"路由错误 - 未定义的方法`sub'为nil:NilClass".

我在日志文件中唯一能看到的是同样的错误.没有堆栈跟踪/调试跟踪,因此很难确定错误的来源.理想情况下,我希望看到"来自gem的堆栈跟踪",但看起来rails不会调试源自应用程序外部的错误?

我正在使用rvm,ruby 1.9.2,rails 3.0.1.

这是来自gem的我的config/routes.rb文件,虽然我不认为这是一个路由错误,因为调试消息建议..

Rails.application.routes.draw do
    resources :pictures, :controller => 'morph/pictures'
end
Run Code Online (Sandbox Code Playgroud)

有什么建议?

debugging gem ruby-on-rails rails-engines ruby-on-rails-3

5
推荐指数
2
解决办法
3001
查看次数

HABTM链接表未在可安装引擎中采用isolate_namespace值

我目前正在开发一种可安装的发动机.在发动机内我有以下两种型号:

  module Ems
    class Channel < ActiveRecord::Base
      has_and_belongs_to_many :categories
    end
  end

  module Ems
    class Category < ActiveRecord::Base
      has_and_belongs_to_many :channels
    end
  end
Run Code Online (Sandbox Code Playgroud)

这些是db迁移文件:

  class CreateEmsChannels < ActiveRecord::Migration
    def change
      create_table :ems_channels do |t|
        t.string :slug
        t.string :name

        t.timestamps
      end
    end
  end

  class CreateEmsCategories < ActiveRecord::Migration
    def change
      create_table :ems_categories do |t|
        t.string :slug
        t.string :name
        t.text :strapline

        t.timestamps
      end
    end
  end


  class CreateEmsCategoriesChannels < ActiveRecord::Migration
    def up
      # Create the association table
      create_table :ems_categories_channels, :id => false do |t|
        t.integer :category_id, …
Run Code Online (Sandbox Code Playgroud)

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

5
推荐指数
1
解决办法
846
查看次数

Rails app引擎

我们如何将现有的rails app(3.2.11)转换为引擎.我们在rails应用程序中有一些已定义的功能,我们希望将此rails应用程序功能用作引擎,以便我们可以使用其他rails应用程序添加/共享/安装此功能.

我们有任何可用的宝石或任何想法.

提前致谢!!

ruby-on-rails rails-engines

5
推荐指数
1
解决办法
1466
查看次数

如何在现有的rails应用程序中集成博客?

我有一个工作轨道应用程序.我想添加一个博客.我的要求是:

  • 它应该存在于我的域的子目录中,例如: http://www.mydomain/blog
  • 它应该使用我的应用程序布局
  • 它应该针对Seo进行优化(漂亮的网址,元标记,标题......)
  • 它应该是相对"全功能"
    • Markdown编辑首选(或所见即所得的编辑)
    • 类别和标签
    • 管理部分与身份验证
    • 评论
    • 我安装之前的演示(为什么没有演示?)

你知道什么适合这些需求吗?该网站的博客部分旨在由公司内部使用.使用它的人是非技术性的,但他们可以应对降价或一些非直观的功能.

我试过了:

blogs rails-engines ruby-on-rails-3

5
推荐指数
0
解决办法
460
查看次数

有没有办法轻松重命名现有的Rails引擎?

有一个用于重命名现有Rails应用程序的插件 - https://github.com/get/Rename

但有没有一些解决方案可以轻松完全重命名现有的Rails引擎?

ruby-on-rails-plugins rails-engines ruby-on-rails-3.2

5
推荐指数
0
解决办法
418
查看次数

不要为路由添加Rails引擎名称前缀

我正在转换一个应用程序以使用Rails引擎。我的engines/web文件夹中有一个引擎。在config/routes.rb我这样安装它:

mount Web::Engine => '/', as: 'web_engine'

文件夹结构如下:

config
  routes.rb
engines
  web
    config
      routes.rb
    app
      controllers
        web 
          application_controller.rb
          ...
    lib
      ...
Run Code Online (Sandbox Code Playgroud)

引擎的定义如下:

module Web
  class Engine < Rails::Engine
    isolate_namespace Web
  end
end
Run Code Online (Sandbox Code Playgroud)

我在Web引擎内部的应用程序控制器的定义如下:

module Web
  class ApplicationController < ::ActionController::Base
    layout 'web/layouts/application'

    # other code
  end
end
Run Code Online (Sandbox Code Playgroud)

问题在于Web::ApplicationController我内部必须将路由称为web_engine.my_route_path而不是my_route_path。是否可以web_engine从Web引擎内部访问不带前缀的路由?

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

5
推荐指数
1
解决办法
839
查看次数

Rails 4使用Engine的Factory Girl工厂

我已经创建了一个rails引擎(完整的,不可安装的)来为许多不同的rails应用程序提供模型.我使用Factory Girl Rails来测试这个引擎,测试对于引擎本身都运行良好.

我现在希望能够在包含此引擎的其他应用程序中使用这些工厂.

Gemspec的依赖关系如下所示:

s.add_dependency "rails", "~> 4.0.3"
s.add_dependency "mysql2", "~> 0.3.15"

s.add_development_dependency "rspec-rails", "~> 3.0.0.beta"
s.add_development_dependency "factory_girl_rails", "~> 4.4.1"
s.add_development_dependency "shoulda-matchers", "~> 2.5.0"
Run Code Online (Sandbox Code Playgroud)

我在/spec/factories.rb中定义了我的工厂:

factory :user do
  ...
end
Run Code Online (Sandbox Code Playgroud)

要将factories.rb添加到factory girl中的定义路径,我将以下内容添加到我的/lib/engine_name/engine.rb文件中:

class Engine < ::Rails::Engine

    initializer "model_core.factories", :after => "factory_girl.set_factory_paths" do
      FactoryGirl.definition_file_paths << File.expand_path('../../../spec/factories.rb', __FILE__) if defined?(FactoryGirl)
    end

end
Run Code Online (Sandbox Code Playgroud)

在我的rails应用程序中,我通过将以下内容添加到Gemfile来包含引擎:

gem 'engine_name', git: "<GIT_LOCATION>"
Run Code Online (Sandbox Code Playgroud)

我还将factory_girl_rails添加到应用程序中(有没有一种方法可以从引擎中公开它?而不是必须在应用程序Gemfile中指定它?).

并且在spec_helper.rb中要求工厂女孩栏:

require 'factory_girl_rails'
Run Code Online (Sandbox Code Playgroud)

现在,当我写下一个控制器测试时,如下所示:

it "saves the user to the database" do
  expect{post :create, user: attributes_for(:user)}.to change{User.count}.by(1)
end
Run Code Online (Sandbox Code Playgroud)

我收到错误:"工厂未注册:用户"

我通过打开ruby控制台并运行来仔细检查工厂女孩定义文件路径FactoryGirl.definition_file_paths,我可以在输出中看到来自引擎的factories.rb: …

ruby-on-rails rails-engines ruby-on-rails-4 factory-bot

5
推荐指数
1
解决办法
1331
查看次数

如何使用Rails 4.1预览可安装引擎内定义的电子邮件

我们SomeMailer在引擎内部设置了.生成邮件程序后,Rails会创建一个SomeMailerPreview类,并带有注释:

# Preview this email at http://localhost:3000/rails/mailers/some_mailer/test
Run Code Online (Sandbox Code Playgroud)

但是,一旦我Dummy在我的引擎中运行应用程序,该URL就无法解析.

引擎安装在根路径'/'上:

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

我已尝试过将url与引擎名称的不同组合,但无法解决.

是否可以在引擎内使用预览功能?

actionmailer rails-engines ruby-on-rails-4

5
推荐指数
2
解决办法
687
查看次数

从引擎安装时,Rails应用程序无法找到设计功能

我正在构建一个Rails引擎来处理跨多个应用程序的所有身份验证和授权.所有这些应用程序都使用Devise atm进行身份验证.我想将它移动到一个引擎中,然后可以将其安装在所有这些应用程序中,以便它们自动具有所有设计功能.

我按照设计维基上的"引擎中的设计"指南中的所有步骤进行操作.我遇到的问题是我不能在主应用程序的控制器中使用' current_user '和' new_user_session_path '之类的函数.

我在主应用程序中遇到的错误是:

Showing .../main_app/app/views/shared/_header.haml where line #19 raised:
undefined local variable or method `new_user_session_path' for #<#<Class:0x007f1578968040>:0x007f157897b348>

= link_to t('user.login'), new_user_session_path
Run Code Online (Sandbox Code Playgroud)

引擎没有isolate_namespace.我将Devise添加为engine.gemspec文件中的依赖项,并从主应用程序中的Gemfile中删除了Devise.引擎安装在主应用程序中:

mount Engine::Engine, at: 'idms'
Run Code Online (Sandbox Code Playgroud)

在发动机的路线中,我将设计配置为:

devise_for :users, {
  class_name: "IdmsGem::User",
  module: :devise
  controllers: { sessions: "devise/sessions" }
}
Run Code Online (Sandbox Code Playgroud)

initializers/devise.rb文件如下:

require 'devise/orm/active_record'

Devise.setup do |config|
  config.router_name = '/idms_gem'
end
Run Code Online (Sandbox Code Playgroud)

引擎中的用户模型:

module Engine
  class User < ActiveRecord::Base
    devise :database_authenticatable
    self.table_name = "users"
  end
end
Run Code Online (Sandbox Code Playgroud)

我在Ruby 2.2.2上使用Rails 4.2.1和Devise 3.5.1.

我的问题是,如何让我的主应用程序中的控制器和视图从我的引擎中配置的设备访问功能?

欢迎任何帮助!我现在一直在谷歌搜索和尝试过去几天的所有事情.感谢大家!

编辑: …

ruby ruby-on-rails rails-engines devise ruby-on-rails-4

5
推荐指数
1
解决办法
515
查看次数

在另一个rails引擎中访问devise current_user

所以这是我的问题.我有一个主要应用程序,它正在设计,我正在创建一个引擎.在引擎中我需要来自主应用程序的current_user.不知道我将如何得到它,我尝试了这个链接但无济于事.任何帮助都会很棒.如果不建议这样做,请解释原因.

ruby-on-rails rails-engines devise

5
推荐指数
1
解决办法
673
查看次数