Ruby on rails 为什么我会得到一个;未初始化的常量细化页面“;添加精炼厂CMS后尝试播种时
我已经将RefineryCMS 2.0.3添加到现有的(启动前,所以我可以抽db)应用程序中。我在升级到设计2.0和rails 3.2时遇到了很多问题,但我已经克服了这些问题,应用程序将从哪里开始。但不幸的是,我在炼油厂遇到了障碍 如果我设定种子或尝试创建页面,我会遇到下面列出的错误。我已经仔细检查过了,所有的迁移似乎都被包括(附加)了,所有的迁移都已启动。数据库架构(部分附加)似乎处于工作状态 我能想到的唯一一件事是,也许一颗宝石是相互冲突的,但我不确定如何冲突。我已经添加了我的gemfile,以防更熟悉Rails的人能够发现它 谢谢Ruby on rails 为什么我会得到一个;未初始化的常量细化页面“;添加精炼厂CMS后尝试播种时,ruby-on-rails,ruby-on-rails-3,refinerycms,Ruby On Rails,Ruby On Rails 3,Refinerycms,我已经将RefineryCMS 2.0.3添加到现有的(启动前,所以我可以抽db)应用程序中。我在升级到设计2.0和rails 3.2时遇到了很多问题,但我已经克服了这些问题,应用程序将从哪里开始。但不幸的是,我在炼油厂遇到了障碍 如果我设定种子或尝试创建页面,我会遇到下面列出的错误。我已经仔细检查过了,所有的迁移似乎都被包括(附加)了,所有的迁移都已启动。数据库架构(部分附加)似乎处于工作状态 我能想到的唯一一件事是,也许一颗宝石是相互冲突的,但我不确定如何冲突。我已经添加了我的gemfile
尝试运行rake db:seed时出错
rake db:seed --trace
** Invoke db:seed (first_time)
** Execute db:seed
** Invoke db:abort_if_pending_migrations (first_time)
** Invoke environment (first_time)
** Execute environment
** Execute db:abort_if_pending_migrations
rake aborted!
uninitialized constant RefineryPage
/Users/chance/code/rails/nokr/activesupport/ruby/1.9.1/gems/activesupport-3.2.3/lib/active_support/inflector/methods.rb:229:in `block in constantize'
/Users/chance/code/rails/nokr/activesupport/ruby/1.9.1/gems/activesupport-3.2.3/lib/active_support/inflector/methods.rb:228:in `each'
/Users/chance/code/rails/nokr/activesupport/ruby/1.9.1/gems/activesupport-3.2.3/lib/active_support/inflector/methods.rb:228:in `constantize'
/Users/chance/code/rails/nokr/activesupport/ruby/1.9.1/gems/activesupport-3.2.3/lib/active_support/core_ext/string/inflections.rb:54:in `constantize'
/Users/chance/code/rails/nokr/activesupport/ruby/1.9.1/gems/active_scaffold-3.2.3/lib/active_scaffold/extensions/reverse_associations.rb:34:in `block in autodetect_inverse'
/Users/chance/code/rails/nokr/activesupport/ruby/1.9.1/gems/active_scaffold-3.2.3/lib/active_scaffold/extensions/reverse_associations.rb:26:in `each'
/Users/chance/code/rails/nokr/activesupport/ruby/1.9.1/gems/active_scaffold-3.2.3/lib/active_scaffold/extensions/reverse_associations.rb:26:in `autodetect_inverse'
/Users/chance/code/rails/nokr/activesupport/ruby/1.9.1/gems/active_scaffold-3.2.3/lib/active_scaffold/extensions/reverse_associations.rb:15:in `inverse_of_with_autodetect'
/Users/chance/code/rails/nokr/activesupport/ruby/1.9.1/gems/activerecord-3.2.3/lib/active_record/associations/association.rb:212:in `inverse_reflection_for'
/Users/chance/code/rails/nokr/activesupport/ruby/1.9.1/gems/activerecord-3.2.3/lib/active_record/associations/association.rb:217:in `invertible_for?'
/Users/chance/code/rails/nokr/activesupport/ruby/1.9.1/gems/activerecord-3.2.3/lib/active_record/associations/association.rb:108:in `set_inverse_instance'
/Users/chance/code/rails/nokr/activesupport/ruby/1.9.1/gems/activerecord-3.2.3/lib/active_record/associations/collection_association.rb:351:in `add_to_target'
/Users/chance/code/rails/nokr/activesupport/ruby/1.9.1/gems/activerecord-3.2.3/lib/active_record/associations/collection_association.rb:112:in `build'
/Users/chance/code/rails/nokr/activesupport/ruby/1.9.1/gems/activerecord-3.2.3/lib/active_record/associations/collection_proxy.rb:46:in `build'
/Users/chance/code/rails/nokr/activesupport/ruby/1.9.1/gems/globalize3-0.2.0/lib/globalize/active_record/instance_methods.rb:134:in `translation_for'
/Users/chance/code/rails/nokr/activesupport/ruby/1.9.1/gems/globalize3-0.2.0/lib/globalize/active_record/adapter.rb:77:in `fetch_attribute'
/Users/chance/code/rails/nokr/activesupport/ruby/1.9.1/gems/globalize3-0.2.0/lib/globalize/active_record/adapter.rb:24:in `block in fetch'
/Users/chance/code/rails/nokr/activesupport/ruby/1.9.1/gems/globalize3-0.2.0/lib/globalize/active_record/adapter.rb:23:in `each'
/Users/chance/code/rails/nokr/activesupport/ruby/1.9.1/gems/globalize3-0.2.0/lib/globalize/active_record/adapter.rb:23:in `fetch'
/Users/chance/code/rails/nokr/activesupport/ruby/1.9.1/gems/globalize3-0.2.0/lib/globalize/active_record/instance_methods.rb:67:in `read_attribute'
/Users/chance/code/rails/nokr/activesupport/ruby/1.9.1/gems/globalize3-0.2.0/lib/globalize/active_record/class_methods.rb:114:in `block in translated_attr_accessor'
/Users/chance/code/rails/nokr/activesupport/ruby/1.9.1/gems/activemodel-3.2.3/lib/active_model/dirty.rb:154:in `attribute_will_change!'
/Users/chance/code/rails/nokr/activesupport/ruby/1.9.1/gems/globalize3-0.2.0/lib/globalize/active_record/instance_methods.rb:49:in `write_attribute'
/Users/chance/code/rails/nokr/activesupport/ruby/1.9.1/gems/globalize3-0.2.0/lib/globalize/active_record/class_methods.rb:111:in `block in translated_attr_accessor'
/Users/chance/code/rails/nokr/activesupport/ruby/1.9.1/gems/activerecord-3.2.3/lib/active_record/attribute_assignment.rb:85:in `block in assign_attributes'
/Users/chance/code/rails/nokr/activesupport/ruby/1.9.1/gems/activerecord-3.2.3/lib/active_record/attribute_assignment.rb:78:in `each'
/Users/chance/code/rails/nokr/activesupport/ruby/1.9.1/gems/activerecord-3.2.3/lib/active_record/attribute_assignment.rb:78:in `assign_attributes'
(eval):3:in `block in assign_attributes'
/Users/chance/code/rails/nokr/activesupport/ruby/1.9.1/gems/globalize3-0.2.0/lib/globalize/active_record/instance_methods.rb:170:in `with_given_locale'
(eval):3:in `assign_attributes'
/Users/chance/code/rails/nokr/activesupport/ruby/1.9.1/gems/activerecord-3.2.3/lib/active_record/base.rb:498:in `initialize'
/Users/chance/code/rails/nokr/activesupport/ruby/1.9.1/gems/activerecord-3.2.3/lib/active_record/validations.rb:39:in `new'
/Users/chance/code/rails/nokr/activesupport/ruby/1.9.1/gems/activerecord-3.2.3/lib/active_record/validations.rb:39:in `create!'
/Users/chance/code/rails/nokr/activesupport/ruby/1.9.1/gems/refinerycms-pages-2.0.3/db/seeds.rb:2:in `<top (required)>'
/Users/chance/code/rails/nokr/activesupport/ruby/1.9.1/gems/railties-3.2.3/lib/rails/engine.rb:520:in `load_seed'
/Users/chance/code/rails/nokr/activesupport/ruby/1.9.1/gems/railties-3.2.3/lib/rails/railtie/configurable.rb:30:in `method_missing'
/Users/chance/code/rails/nokr/db/seeds.rb:10:in `<top (required)>'
/Users/chance/code/rails/nokr/activesupport/ruby/1.9.1/gems/railties-3.2.3/lib/rails/engine.rb:520:in `load_seed'
/Users/chance/code/rails/nokr/activesupport/ruby/1.9.1/gems/activerecord-3.2.3/lib/active_record/railties/databases.rake:309:in `block (2 levels) in <top (required)>'
/Users/chance/code/rails/nokr/activesupport/ruby/1.9.1/gems/rake-0.9.2.2/lib/rake/task.rb:205:in `call'
/Users/chance/code/rails/nokr/activesupport/ruby/1.9.1/gems/rake-0.9.2.2/lib/rake/task.rb:205:in `block in execute'
/Users/chance/code/rails/nokr/activesupport/ruby/1.9.1/gems/rake-0.9.2.2/lib/rake/task.rb:200:in `each'
/Users/chance/code/rails/nokr/activesupport/ruby/1.9.1/gems/rake-0.9.2.2/lib/rake/task.rb:200:in `execute'
/Users/chance/code/rails/nokr/activesupport/ruby/1.9.1/gems/rake-0.9.2.2/lib/rake/task.rb:158:in `block in invoke_with_call_chain'
/Users/chance/.rbenv/versions/1.9.2-p290/lib/ruby/1.9.1/monitor.rb:201:in `mon_synchronize'
/Users/chance/code/rails/nokr/activesupport/ruby/1.9.1/gems/rake-0.9.2.2/lib/rake/task.rb:151:in `invoke_with_call_chain'
/Users/chance/code/rails/nokr/activesupport/ruby/1.9.1/gems/rake-0.9.2.2/lib/rake/task.rb:144:in `invoke'
/Users/chance/code/rails/nokr/activesupport/ruby/1.9.1/gems/rake-0.9.2.2/lib/rake/application.rb:116:in `invoke_task'
/Users/chance/code/rails/nokr/activesupport/ruby/1.9.1/gems/rake-0.9.2.2/lib/rake/application.rb:94:in `block (2 levels) in top_level'
/Users/chance/code/rails/nokr/activesupport/ruby/1.9.1/gems/rake-0.9.2.2/lib/rake/application.rb:94:in `each'
/Users/chance/code/rails/nokr/activesupport/ruby/1.9.1/gems/rake-0.9.2.2/lib/rake/application.rb:94:in `block in top_level'
/Users/chance/code/rails/nokr/activesupport/ruby/1.9.1/gems/rake-0.9.2.2/lib/rake/application.rb:133:in `standard_exception_handling'
/Users/chance/code/rails/nokr/activesupport/ruby/1.9.1/gems/rake-0.9.2.2/lib/rake/application.rb:88:in `top_level'
/Users/chance/code/rails/nokr/activesupport/ruby/1.9.1/gems/rake-0.9.2.2/lib/rake/application.rb:66:in `block in run'
/Users/chance/code/rails/nokr/activesupport/ruby/1.9.1/gems/rake-0.9.2.2/lib/rake/application.rb:133:in `standard_exception_handling'
/Users/chance/code/rails/nokr/activesupport/ruby/1.9.1/gems/rake-0.9.2.2/lib/rake/application.rb:63:in `run'
/Users/chance/code/rails/nokr/activesupport/ruby/1.9.1/gems/rake-0.9.2.2/bin/rake:33:in `<top (required)>'
/Users/chance/code/rails/nokr/activesupport/ruby/1.9.1/bin/rake:19:in `load'
/Users/chance/code/rails/nokr/activesupport/ruby/1.9.1/bin/rake:19:in `<main>'
Tasks: TOP => db:seed
gemfile
require 'rbconfig'
HOST_OS = Config::CONFIG['host_os']
source 'http://rubygems.org'
group :assets do
gem 'sass-rails'
gem 'coffee-rails'
gem 'uglifier'
gem 'compass'
end
gem 'rack'
gem 'rails', "~> 3.2"
group :development, :test do
gem 'sqlite3'
end
gem "geocoder"
gem "geonames"
gem "devise", "~> 2.0"
gem "geocoder"
gem "geonames"
gem "paperclip", "~> 2.4"
gem 'transloadit-rails'
gem 'uuidtools'
gem "friendly_id", "~> 4.0.0.beta14"
gem "squeel"
gem "pg"
gem "cancan"
gem 'kaminari'
#gem 'cantango'
gem "formtastic"
gem 'will_paginate'
gem "nested_form", :git => "git://github.com/ryanb/nested_form.git"
gem 'tire', :git => 'https://github.com/karmi/tire'
gem 'multi_json'
gem 'active_scaffold'
gem "meta_search"
gem 'newrelic_rpm'
gem 'paper_trail'
gem 'jquery-rails'
gem 'activeadmin', :git => "git://github.com/gregbell/active_admin.git"
gem 'refinerycms', '~> 2.0.0'
gem 'refinerycms-i18n', '~> 2.0.0'
# gem 'refinerycms-blog', '~> 2.0.0'
# gem 'refinerycms-inquiries', '~> 2.0.0'
# gem 'refinerycms-search', '~> 2.0.0'
# gem 'refinerycms-page-images', '~> 2.0.0'
if HOST_OS =~ /linux/i
gem 'therubyracer', '>= 0.8.2'
end
gem "haml", ">= 3.1.2"
group :development do
gem "haml-rails", ">= 0.3.4"
gem "rspec-rails", ">= 2.6.1"
gem "guard", ">= 0.6.2"
gem "rails-footnotes", ">= 3.7"
gem 'rb-fsevent'
gem 'growl'
gem "guard-bundler", ">= 0.1.3"
gem "guard-rails", ">= 0.0.3"
gem "guard-livereload", ">= 0.3.0"
gem "guard-rspec", ">= 0.4.3"
gem "guard-cucumber", ">= 0.6.1"
end
group :test do
gem "factory_girl_rails", ">= 1.2.0"
gem "cucumber-rails", ">= 1.1.1"
gem "capybara", ">= 1.1.1"
gem "database_cleaner", ">= 0.6.7"
gem "launchy", ">= 2.0.5"
gem "rspec-rails", ">= 2.6.1"
gem "guard", ">= 0.6.2"
gem 'rb-fsevent'
gem 'growl'
gem "guard-bundler", ">= 0.1.3"
gem "guard-rspec", ">= 0.4.3"
gem "guard-cucumber", ">= 0.6.1"
end
部分模式
create_table "refinery_images", :force => true do |t|
t.string "image_mime_type"
t.string "image_name"
t.integer "image_size"
t.integer "image_width"
t.integer "image_height"
t.string "image_uid"
t.string "image_ext"
t.datetime "created_at", :null => false
t.datetime "updated_at", :null => false
end
create_table "refinery_page_part_translations", :force => true do |t|
t.integer "refinery_page_part_id"
t.string "locale"
t.text "body"
t.datetime "created_at", :null => false
t.datetime "updated_at", :null => false
end
add_index "refinery_page_part_translations", ["locale"], :name => "index_refinery_page_part_translations_on_locale"
add_index "refinery_page_part_translations", ["refinery_page_part_id"], :name => "index_f9716c4215584edbca2557e32706a5ae084a15ef"
create_table "refinery_page_parts", :force => true do |t|
t.integer "refinery_page_id"
t.string "title"
t.text "body"
t.integer "position"
t.datetime "created_at", :null => false
t.datetime "updated_at", :null => false
end
add_index "refinery_page_parts", ["id"], :name => "index_refinery_page_parts_on_id"
add_index "refinery_page_parts", ["refinery_page_id"], :name => "index_refinery_page_parts_on_refinery_page_id"
create_table "refinery_page_translations", :force => true do |t|
t.integer "refinery_page_id"
t.string "locale"
t.string "title"
t.string "custom_slug"
t.string "menu_title"
t.string "slug"
t.datetime "created_at", :null => false
t.datetime "updated_at", :null => false
end
add_index "refinery_page_translations", ["locale"], :name => "index_refinery_page_translations_on_locale"
add_index "refinery_page_translations", ["refinery_page_id"], :name => "index_d079468f88bff1c6ea81573a0d019ba8bf5c2902"
create_table "refinery_pages", :force => true do |t|
t.integer "parent_id"
t.string "path"
t.string "slug"
t.boolean "show_in_menu", :default => true
t.string "link_url"
t.string "menu_match"
t.boolean "deletable", :default => true
t.boolean "draft", :default => false
t.boolean "skip_to_first_child", :default => false
t.integer "lft"
t.integer "rgt"
t.integer "depth"
t.string "view_template"
t.string "layout_template"
t.datetime "created_at", :null => false
t.datetime "updated_at", :null => false
end
add_index "refinery_pages", ["depth"], :name => "index_refinery_pages_on_depth"
add_index "refinery_pages", ["id"], :name => "index_refinery_pages_on_id"
add_index "refinery_pages", ["lft"], :name => "index_refinery_pages_on_lft"
add_index "refinery_pages", ["parent_id"], :name => "index_refinery_pages_on_parent_id"
add_index "refinery_pages", ["rgt"], :name => "index_refinery_pages_on_rgt"
create_table "refinery_resources", :force => true do |t|
t.string "file_mime_type"
t.string "file_name"
t.integer "file_size"
t.string "file_uid"
t.string "file_ext"
t.datetime "created_at", :null => false
t.datetime "updated_at", :null => false
end
create_table "refinery_roles", :force => true do |t|
t.string "title"
end
create_table "refinery_roles_users", :id => false, :force => true do |t|
t.integer "user_id"
t.integer "role_id"
end
add_index "refinery_roles_users", ["role_id", "user_id"], :name => "index_refinery_roles_users_on_role_id_and_user_id"
add_index "refinery_roles_users", ["user_id", "role_id"], :name => "index_refinery_roles_users_on_user_id_and_role_id"
create_table "refinery_user_plugins", :force => true do |t|
t.integer "user_id"
t.string "name"
t.integer "position"
end
add_index "refinery_user_plugins", ["name"], :name => "index_refinery_user_plugins_on_name"
add_index "refinery_user_plugins", ["user_id", "name"], :name => "index_refinery_user_plugins_on_user_id_and_name", :unique => true
create_table "refinery_users", :force => true do |t|
t.string "username", :null => false
t.string "email", :null => false
t.string "encrypted_password", :null => false
t.datetime "current_sign_in_at"
t.datetime "last_sign_in_at"
t.string "current_sign_in_ip"
t.string "last_sign_in_ip"
t.integer "sign_in_count"
t.datetime "remember_created_at"
t.string "reset_password_token"
t.datetime "reset_password_sent_at"
t.datetime "created_at", :null => false
t.datetime "updated_at", :null => false
end
add_index "refinery_users", ["id"], :name => "index_refinery_users_on_id"
create_table "seo_meta", :force => true do |t|
t.integer "seo_meta_id"
t.string "seo_meta_type"
t.string "browser_title"
t.string "meta_keywords"
t.text "meta_description"
t.datetime "created_at", :null => false
t.datetime "updated_at", :null => false
end
add_index "seo_meta", ["id"], :name => "index_seo_meta_on_id"
add_index "seo_meta", ["seo_meta_id", "seo_meta_type"], :name => "index_seo_meta_on_seo_meta_id_and_seo_meta_type"
create_table "user_addresses", :force => true do |t|
t.integer "address_id"
t.integer "user_id"
t.datetime "created_at", :null => false
t.datetime "updated_at", :null => false
end
如果您愿意的话,我早些时候在Refinery CMS Google Group上问过这个问题。有趣的是,如果您从GEM文件中删除“active_scaffold”(至少,我能够以这种方式在本地实例化一个Refinery::页面,否则我会得到与您相同的错误),这个问题就会消失。但是,我敢打赌这个问题会再次出现。据我所知,问题源于GlobalizeGem,炼油厂页面使用它进行翻译。页面模型调用此类宏:
translates :title, :menu_title, :custom_slug, :slug, :include => :seo_meta
这导致globalize gem自动设置多个模型关联。问题是,这些关联不适用于名称空间模型(Refinery::Page是名称空间模型)。特别是,Globalize::ActiveRecord::ActMacro中的此方法用于设置“refinery/pages”和“refinery/pages/translations”之间关联的类名,并使用基本rails约定从db表名推断模型名:
def class_name
@class_name ||= begin
class_name = table_name[table_name_prefix.length..-(table_name_suffix.length + 1)].downcase.camelize
pluralize_table_names ? class_name.singularize : class_name
end
end
我在rails源代码中进行了一些挖掘,以了解rails如何使用基于表名的命名空间模型。我还没看到什么。globalize gem可能需要支持在translates宏上传入的附加选项,以允许使用名称空间模型,然后炼油厂gem需要传入该选项。还在研究
有趣的错误。斯奎尔是罪魁祸首,正如我在回答您在CMS上提交的问题时指出的: 希望我能充分回答您的问题:-) 菲尔
你能在GitHub中创建一个回购协议来解决这个问题吗?嘿,伙计,非常感谢你花时间回答我的问题。我想知道如何开始第二次悬赏,因为我的问题/答案有点不对劲。在我将refinery/existing codebase移动到一个新的应用程序并更新了refinery之后,错误发生了一些变化。嘿,没问题,我看到Philip在github问题上为你做了很多。绝对值得赏金。谢谢你修复链接,里奇!
def class_name
@class_name ||= begin
class_name = table_name[table_name_prefix.length..-(table_name_suffix.length + 1)].downcase.camelize
pluralize_table_names ? class_name.singularize : class_name
end
end