2011-06-02 39 views
2

這是學習鐵軌的最糟糕的一天。已經無法連接和配置sqlite3,mysql數據庫我轉向mongo映射器並面臨相同的問題。當我嘗試啓動rails服務器我得到以下幾點:Mongo Mapper的軌道

/usr/local/lib/ruby/gems/1.8/gems/activesupport-3.0.7/lib/active_support/dependencies.rb:239:in `require': no such file to load -- mongo_mapper (LoadError) 

我已經安裝了mongo_mapper寶石,但是當我做「這mongo_mapper」它不返回任何東西。

這裏是我的mongo_config.rb文件放在初始化文件夾中:

require "rubygems" 
require "mongo_mapper" 

MongoMapper.database = "blog-#{Rails.env}" 

更新1:

我更改爲以下:

require "rubygems" 
include MongoMapper 

MongoMapper.database = "blog-#{Rails.env}" 

現在我得到以下錯誤:

/Users/azamsharp/Projects/railsprojects/blog/config/initializers/mongo_config.rb:2: uninitialized constant MongoMapper (NameError) 
+0

而不是放棄對sqlite3和mysql爲什麼不給你一個再試一次。他們是最簡單的數據庫,NoSQL只是增加了混合的複雜性。只是一個建議。 – 2011-06-02 21:28:20

+0

我一直在試圖讓rails服務器啓動過去5個小時,但仍然沒有成功。我正在使用Rails 3.0.7。這裏是線程=> http://stackoverflow.com/questions/6217602/trouble-getting-the-rails-server-started – azamsharp 2011-06-02 21:39:35

+0

Yagooar的答案下面解決了我的問題,難道你不想接受它作爲一個解決方案? – 2013-09-22 19:06:50

回答

-1

嘗試刪除需要的線路並將其替換爲include MongoMapper

+0

啓動rails服務器時仍然出錯。請參閱更新1 – azamsharp 2011-06-02 21:39:54

+0

捆綁安裝的輸出? – 2011-06-02 21:45:02

+0

我沒有使用bundle install我使用sudo gem install mongo_mapper手動安裝了mongo_mapper gem。 – azamsharp 2011-06-02 21:50:22

4

您必須使用捆綁器和導軌3。不要試圖不使用它。以下內容添加到您的Gemfile

source 'http://gemcutter.org' 
source 'http://rubygems.org' 

gem "rails", "3.0.7" 
gem 'bson', "1.1.1" 
gem 'bson_ext', "1.1.1" 
gem 'mongo_mapper' 

然後運行

bundle install 

然後rails server將工作

4

爲了得到mongo_mapper在Rails的工作(下Rails的3.1測試,應在Rails的3.0。 x),您必須按照下列步驟操作:

  1. 在Gemfile中,a DD的mongo_mapper和BSON寶石:

    gem 'mongo_mapper' 
    gem 'bson_ext' 
    
  2. 運行捆綁安裝

  3. 在config /目錄下創建一個mongo.yml文件,像這樣的:

    # config/mongo.yml 
    
    defaults: &defaults 
        host: 127.0.0.1 
        port: 27017 
    
    development: 
        <<: *defaults 
        database: db_development 
        username: user 
        password: password 
    
    test: 
        <<: *defaults 
        database: db_test 
    
    # set these environment variables on your prod server 
    production: 
        <<: *defaults 
        database: 
        username: 
        password: 
    
  4. 在配置/ initializers目錄下,創建一個mongo.rb文件是這樣的:

    # config/initializers/mongo.rb 
    
    #include MongoMapper 
    
    db_config = YAML::load(File.read(File.join(Rails.root, "/config/mongo.yml"))) 
    # 
    if db_config[Rails.env] && db_config[Rails.env]['adapter'] == 'mongodb' 
        mongo = db_config[Rails.env] 
        MongoMapper.connection = Mongo::Connection.new(mongo['host'] || 'localhost', 
                   mongo['port'] || 27017, 
                  :logger => Rails.logger) 
        MongoMapper.database = mongo['database'] 
    
        if mongo['username'] && mongo['password'] 
        MongoMapper.database.authenticate(mongo['username'], mongo['password']) 
        end 
    end 
    
    # Used for image uploads 
    # CarrierWave.configure do |config| 
    # mongo = db_config[Rails.env] 
    # config.grid_fs_database = mongo['database'] 
    # config.grid_fs_host = mongo['host'] || 'localhost' 
    # config.grid_fs_access_url = "gridfs" 
    # config.grid_fs_username = mongo['username'] 
    # config.grid_fs_password = mongo['password'] 
    # end 
    
    # It's also possible to define indexes in the the model itself; however, 
    # a few issues are being worked out still. This is a temporary solution. 
    # Comment.ensure_index([["story_id", 1], ["path", 1], ["points", -1]]) 
    # MongoMapper.ensure_indexes! 
    
    # Handle passenger forking. 
    # if defined?(PhusionPassenger) 
    # PhusionPassenger.on_event(:starting_worker_process) do |forked| 
    #  MongoMapper.database.connect_to_master if forked 
    # end 
    # end 
    
    if defined?(PhusionPassenger) 
        PhusionPassenger.on_event(:starting_worker_process) do |forked| 
         MongoMapper.connection.connect if forked 
        end 
    end 
    
  5. 在啓動rails服務器之前啓動mongod服務器並享受!

+0

非常好的先生! – 2013-07-06 12:25:49

+0

非常感謝,它適合我! – 2013-09-22 19:07:16

+0

+1不錯的一個。但是是我,還是'mongo.yml'配置缺少'adapter:mongodb'配置?我親自把它放在'defaults:'下面。 – zelanix 2014-10-24 14:20:38