我希望能够在基本应用程序中覆盖我的 rails 3 引擎的模型和控制器。
检查 $LOAD_PATH,我在那里找到了引擎的 'app/{models,controllers}',但我不能明确要求引擎的模型或控制器文件: require 'engine_name/model_name' 失败并显示“没有这样的文件”(尝试使用两个命名空间( app/controllers/enginename/*) 和普通引擎)。
那么,在 Rails 3 中扩展引擎模型/控制器而不将它们复制到基础应用程序的最佳方法是什么?
基本上,这是一个加载顺序问题。所以,如果我明确要求引擎的模型,一切都好,但我希望有更好的方法。
我计划聘请一名承包商来开发我的 Rails 3 应用程序的一些模块,而不将整个应用程序暴露给他。
我得到了 SO 的建议,我应该创建一个引擎,将其安装到我的主应用程序上,并让承包商在这个引擎上工作。
我应该如何将引擎存储在不同的 github 存储库中?我如何告诉我的实时 (Heroku) 服务器从此存储库加载此引擎,以及我的承包商如何在不访问代码的情况下从我的主应用程序发出请求?
谢谢。
我正在开发我的第一个Rails引擎.这是一个包含资产和基本功能的管理面板布局.
我真正想要的是它基于Twitter Bootstrap + SASS.
如果我在我的引擎的gemspec文件中只有这些行:
gem.add_dependency "railties", "~> 3.2"
gem.add_dependency "sass-rails"
gem.add_dependency "bootstrap-sass"
Run Code Online (Sandbox Code Playgroud)
尝试访问页面时出现此错误:
ActionView::Template::Error (couldn't find file 'bootstrap'
(in /Users/swamiatma/Documents/Dropbox/coding/ruby/gems/tkh_admin_panel/app/assets/javascripts/admin.js:9)):
Run Code Online (Sandbox Code Playgroud)
但是,如果我将其添加到主机应用程序gemfile:
gem 'bootstrap-sass'
Run Code Online (Sandbox Code Playgroud)
所以我得到以下几行:
group :assets do
gem 'jquery-rails'
gem 'sass-rails', '~> 3.2.3'
gem 'coffee-rails', '~> 3.2.1'
gem 'uglifier', '>= 1.0.3'
gem 'bootstrap-sass'
end
Run Code Online (Sandbox Code Playgroud)
它现在工作正常.我认为这个依赖项严格属于Rails引擎gem,应该就在那里.
是什么赋予了?
我正在创建独立的rails引擎应用程序,它将使用mongoid进一步添加到主应用程序中.所以,我就是这样开始的.
rails plugin new some_engine --mountable --skip-active-record
Run Code Online (Sandbox Code Playgroud)
然后在gem文件中:
gem 'mongoid', "~> 3.0.15"
Run Code Online (Sandbox Code Playgroud)
然后我运行此命令来生成mongo配置文件:
some_engine\test\dummy>rails g mongoid:config
Run Code Online (Sandbox Code Playgroud)
在test/dummy/config文件夹下生成mongoid.yml
现在,如果我生成一些模型,它仍然会调用活动记录
some_engine>rails generate scaffold post title:string
Run Code Online (Sandbox Code Playgroud)
它给出了输出:
invoke active_record
create db/migrate/20121219170013_create_some_engine_posts.rb
...........
Run Code Online (Sandbox Code Playgroud)
然后我更改了脚本/ rails文件夹下的rails文件,因为它具有:
require 'rails/all'
Run Code Online (Sandbox Code Playgroud)
至
require "action_controller/railtie"
require "action_mailer/railtie"
require "active_resource/railtie"
require "sprockets/railtie"
require "rails/test_unit/railtie"
Run Code Online (Sandbox Code Playgroud)
然后,如果我生成的东西,它仍然不会调用mongoid
some_engine>rails generate model post
Run Code Online (Sandbox Code Playgroud)
这里什么都没发生.
当我跑的时候
some_engine>rails generate scaffold post title:string
invoke resource_route.....
Run Code Online (Sandbox Code Playgroud)
我在这里错过了一些使用Rails引擎的mongoid的东西吗?
我有一个带有安装引擎的项目.到目前为止,除了"更新"功能外,一切都按预期工作.引擎控制器是通过脚手架创建的,一切看起来都像我期望的那样.索引,显示,编辑,删除所有按预期工作,以及关联的前后过滤操作.
但是,Update会引发以下异常:
屏幕:
NoMethodError in MeetmeManagerPlugin::ConferenceRoomsController#update
private method `update' called for #<MeetmeManagerPlugin::ConferenceRoom:0x007fe8ac24a080>
Run Code Online (Sandbox Code Playgroud)
安慰:
NoMethodError (private method `update' called for #<MeetmeManagerPlugin::ConferenceRoom:0x007fe8ac24a080>):
activemodel (3.2.13) lib/active_model/attribute_methods.rb:404:in `method_missing'
activerecord (3.2.13) lib/active_record/attribute_methods.rb:149:in `method_missing'
/Volumes/MacTheCrypt 1/Project Work/jkl5_projects/meetme_manager_plugin/app/controllers/meetme_manager_plugin/conference_rooms_controller.rb:57:in `update'
actionpack (3.2.13) lib/action_controller/metal/implicit_render.rb:4:in `send_action'
actionpack (3.2.13) lib/abstract_controller/base.rb:167:in `process_action'
actionpack (3.2.13) lib/action_controller/metal/rendering.rb:10:in `process_action'
actionpack (3.2.13) lib/abstract_controller/callbacks.rb:18:in `block in process_action'
Run Code Online (Sandbox Code Playgroud)
控制器中的实际代码如下:
def update
if @conference_room.update(conference_room_params)
redirect_to @conference_room, notice: 'Conference room was successfully updated.'
else
render action: 'edit'
end
end
Run Code Online (Sandbox Code Playgroud)
令人窒息的是"@ conference_room.update(conference_room_params)".
相当多的网络搜索尚未对此有所了解,所以我认为这里有人可能会有一个建议.在此先感谢,如果您需要我的任何进一步的信息,请告诉我.
我在travis上测试gem时遇到此错误消息:
SQLite3::CantOpenException: unable to open database file
Run Code Online (Sandbox Code Playgroud)
我甚至没有在任何测试中访问数据库,这很奇怪.虽然我没有任何固定装置,但看起来回溯指向固定装置.即使我这样做,db也是sqlite3 ...它不应该能够动态创建吗?
你可以在这里看到构建输出:http://travis-lite.com/schneems/maildown/jobs/9662299
任何帮助表示赞赏.
在我的内部application.html.erb,我希望能够检测当前渲染页面是否来自已安装的引擎(Forem,如果这很重要),以便我可以active向导航栏添加一个类.有没有一种简单的方法来检测这个?
我正在使用Rails 3.2.
我有一个 Rails 引擎和 Rails 应用程序,都运行 Rails 6.0.0.rc1。
引擎使用 ActiveStorage 附件定义模型,例如。
module Shop
class Product < ApplicationRecord
...
has_one_attached :image
has_many_attached :images
end
end
Run Code Online (Sandbox Code Playgroud)
在引擎视图和应用程序视图中使用此模型并尝试调用= url_for(product.image)会引发异常undefined method 'attachment_path' for #<#<Class:XXX>:XXX>。product.image.attached?返回 true,因此附件可用。
这段代码是从 Rails 应用程序中提取的,它运行得很好。是否有针对 Rails Engine 模型附件的特殊路线助手或rails active_storage:install文档中未提及的除所需之外的任何设置?
ruby-on-rails rails-engines rails-activestorage ruby-on-rails-6
我正在试验一个Rails应用程序的设计,它将大部分功能委托给高度专业化的引擎.但是,可能会有10个Engines左右,我绝对不想管理10个不同的宝石和Git存储库.
Rails和RefineryCMS似乎都安置他们在一个混帐回购所有子模块,但后来不知怎的释放他们作为独立的宝石,以及要求他们全部用-在Rails的情况下-一个简单的require
'rails/all'.
我当然浏览了源代码,但我可以使用更有经验的眼睛寻求帮助......任何人都可以告诉我这个多宝石,一个回购架构是如何工作的?
modularity ruby-on-rails rails-engines refinerycms ruby-on-rails-3
我在Rails 3.1中使用了forem引擎,但我的应用程序布局引用了一些资源路由,例如users_path和new_sprite_path.
这一切都在引擎外工作正常,但是当我尝试导航到引擎中的页面时,我得到了
undefined local variable or method `new_sprite_path' for #<#<Class:0x7f4faa4f9240>:0x7f4faa4dc320>
Run Code Online (Sandbox Code Playgroud)
如何让引擎正确查看我的应用程序中的路径?
我自己构建了一个Rails引擎,要求主应用程序有一个Users表.我需要能够在我的引擎中的一个模型和主应用程序中的Users表之间创建关系.这比说起来更复杂belongs_to :user吗?我收到一个错误,指出User对象是nil,但是当我使用控制台时,它会返回正确的用户.我的假设是Rails假设我的belongs_to :user调用意味着用户的类与引擎在同一名称空间中,即MyEngine :: User.有没有办法让我明确指定User类在主应用程序的命名空间而不是引擎的?
我创建了一个新的rails 4引擎并添加了一个模型.我正在尝试使用迁移数据库
RAILS_ENV=test rake db:migrate
Run Code Online (Sandbox Code Playgroud)
它回来时没有错误.但是,当我跑:
rspec spec
Run Code Online (Sandbox Code Playgroud)
返回错误表明存在挂起的迁移.
Migrations are pending; run 'rake db:migrate RAILS_ENV=test' to resolve this issue. (ActiveRecord::PendingMigrationError)
Run Code Online (Sandbox Code Playgroud)
如果我查看我的数据库(在pg和sqlite上试过)它们还没有被运行并且没有创建表,那也是如此.运行上面列出的建议命令不会运行迁移.
'engine_name/db/migrate'中只有一个迁移,虚拟应用内没有迁移.
我正在使用ruby 2.0和rails 4.0.0.rc1.
rails-engines ×12
gem ×1
migration ×1
modularity ×1
mongoid ×1
refinerycms ×1
routes ×1
ruby ×1
sass ×1
travis-ci ×1