【问题标题】:rails generate not working with mongoidrails generate 不适用于 mongoid
【发布时间】:2011-12-08 06:53:28
【问题描述】:

我刚刚使用 mongoid 在 Rails 中创建了一个应用程序。

当我尝试按照 mongoid 网站上的教程运行时

rails g mongoid:config

我收到以下一组错误。

/Users/XXXXXX/.rvm/gems/ruby-1.9.2-p290/gems/activesupport-3.1.1/lib/active_support/whiny_nil.rb:48:in `method_missing': undefined method `values' for nil:NilClass (NoMethodError)
from /Users/XXXXXX/.rvm/gems/ruby-1.9.2-p290/gems/mongoid-2.3.4/lib/mongoid/railtie.rb:64:in `block in <class:Railtie>'
from /Users/XXXXXX/.rvm/gems/ruby-1.9.2-p290/gems/railties-3.1.1/lib/rails/initializable.rb:30:in `instance_exec'
from /Users/XXXXXX/.rvm/gems/ruby-1.9.2-p290/gems/railties-3.1.1/lib/rails/initializable.rb:30:in `run'
from /Users/XXXXXX/.rvm/gems/ruby-1.9.2-p290/gems/railties-3.1.1/lib/rails/initializable.rb:55:in `block in run_initializers'
from /Users/XXXXXX/.rvm/gems/ruby-1.9.2-p290/gems/railties-3.1.1/lib/rails/initializable.rb:54:in `each'
from /Users/XXXXXX/.rvm/gems/ruby-1.9.2-p290/gems/railties-3.1.1/lib/rails/initializable.rb:54:in `run_initializers'
from /Users/XXXXXX/.rvm/gems/ruby-1.9.2-p290/gems/railties-3.1.1/lib/rails/application.rb:96:in `initialize!'
from /Users/XXXXXX/.rvm/gems/ruby-1.9.2-p290/gems/railties-3.1.1/lib/rails/railtie/configurable.rb:30:in `method_missing'
from /Users/XXXXXX/melodizr/config/environment.rb:5:in `<top (required)>'
from /Users/XXXXXX/.rvm/gems/ruby-1.9.2-p290/gems/railties-3.1.1/lib/rails/application.rb:83:in `require'
from /Users/XXXXXX/.rvm/gems/ruby-1.9.2-p290/gems/railties-3.1.1/lib/rails/application.rb:83:in `require_environment!'
from /Users/XXXXXX/.rvm/gems/ruby-1.9.2-p290/gems/railties-3.1.1/lib/rails/commands.rb:22:in `<top (required)>'
from script/rails:6:in `require'
from script/rails:6:in `<main>'

请帮忙,这让我很生气,我觉得我没有错过任何东西,但已经晚了,我可能错了。

【问题讨论】:

  • 显示你使用方法值的那段代码!!

标签: ruby-on-rails ruby mongodb mongoid


【解决方案1】:

你运行的是什么版本的rails?

有些事情搞砸了。确保您拥有最新的 gem(不要在 gemfile 中指定版本):

在您的 rails 应用程序目录中运行所有这些:

gem update --system
gem update
bundle install
bundle update

既然您是最新的,请再试一次。如果它仍然是 barfs,请自己制作文件。这个生成器所做的只是在 config 目录中生成 mongoid.yml,如下所示:

development:
  host: localhost
  database: mongoid_test_development

test:
  host: localhost
  database: mongoid_test_test

# set these environment variables on your prod server
production:
  host: <%= ENV['MONGOID_HOST'] %>
  port: <%= ENV['MONGOID_PORT'] %>
  username: <%= ENV['MONGOID_USERNAME'] %>
  password: <%= ENV['MONGOID_PASSWORD'] %>
  database: <%= ENV['MONGOID_DATABASE'] %>
  # slaves:
  #   - host: slave1.local
  #     port: 27018
  #   - host: slave2.local
  #     port: 27019

【讨论】:

  • 虽然这应该可以解决问题,但他的具体问题是我概述的 mongoid.yml 问题。
【解决方案2】:

当 mongoid.yml 缺少环境部分时会导致此问题。文档说这样做:

host: localhost   
database: my_database

但他们假设您使用的生成器确实可以执行以下操作:

development:
    host: localhost
    database: my_database

railtie 中的那一行正在解析 yml 文件,假设您已经设置了环境。请注意暗示此问题的另一个答案,如果您按照说明进行修复,假设您强制覆盖现有的损坏的 mongoid.yml

【讨论】:

    【解决方案3】:

    当您未能在 mongoid.yml 中包含三个 RAILS_ENV 部分时,我发现了这个问题。我发现您必须在 mongoid.yml YAML 配置文件中包含所有三个部分,如下所示...

    development:
      host: foo-bar
      .....
    test:
      host: test-bar
      ....
    production:
      host: prod-bar
      ....
    

    【讨论】:

      【解决方案4】:

      我必须暂时删除 gem spring 才能正常工作。否则任务rails g mongoid:config 将无法完成执行。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-06-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-05-16
        • 1970-01-01
        • 1970-01-01
        • 2011-04-18
        相关资源
        最近更新 更多