Ruby gem loaded but still gives "uninitialized constant" - mongodb

I don't understand this output:
$ rails c
Loading development environment (Rails 3.2.14)
1.9.3p392 :001> require 'rubygems'
=> false
1.9.3p392 :002 > require 'mongo'
=> false
1.9.3p392 :003 > include Mongo
=> Object
1.9.3p392 :004 > Mongo::VERSION
=> "1.6.0"
1.9.3p392 :005 > c = MongoClient.new
NameError: uninitialized constant MongoClient
from (irb):5
Clearly bundler is running correctly and loading the MongoDB driver gem "mongo" (version 1.6, which should be fine).
Yet when I try to reference MongoClient according to the docs, I get "uninitialized constant." The same happens if I try to reference it as Mongo::MongoClient.new
What am I missing here?

From your console output, you are using MongoDB Ruby driver version 1.6.0.
The corresponding API docs can be found here.
http://api.mongodb.org/ruby/1.6.0/
Version 1.6.0 uses the old Mongo::Connection class to connect to MongoDB.
The MongoClient class is new as of version 1.8.0, and so is not available in any older version.
Please use the matching API and documentation.
Please consider upgrading to newer versions of the mongo_mapper (0.12.0) and mongo (1.9.2) gems.

Related

install mongo with chef

I've tried to figure out how to install a mongodb 3.4 instance using this chef cookbook. Nevertheless, I've not able to get to install it.
This is my mongodb.rb file content:
node.default['mongodb']['package_version'] = '3.4'
include_recipe 'mongodb::default'
And my metadata.db: depends 'mongodb', '~> 0.16.2'.
I've tried to verify it on centos-72 platform using kitchen verify centos-72. I'm getting this message:
ERROR: yum_package[mongodb-org] (mongodb::install line 77) had an error: Chef::Exceptions::Package: Version ["3.4"] of ["mongodb-org"] not found. Did you specify both version and release? (version-release, e.g. 1.84-10.fc6)
I'm realizing this cookbook tries to add this yum_repository:
yum_repository 'mongodb' do
description 'mongodb RPM Repository'
baseurl "http://downloads-distro.mongodb.org/repo/redhat/os/#{node['kernel']['machine'] =~ /x86_64/ ? 'x86_64' : 'i686'}"
action :create
gpgcheck false
enabled true
end
And according to this mongo documentation the link repository should have to be:
https://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/3.4/x86_64/
instead of
"http://downloads-distro.mongodb.org/repo/redhat/os/..."
The repo you are using does not have version 3.4 available. You can verify this manually by just looking at the RPMs in http://downloads-distro.mongodb.org/repo/redhat/os/x86_64/RPMS/

How to check if ElasticSearch is running properly

I am new to ElasticSearch and I am facing issues while connecting to ElasticSearch. Please find below details:
hq plugin and head plugin are showing different results:
Output of HQ Plugin:
Output of Head Plugin:
When I try to connect from my scala code, I get following error:
org.elasticsearch.client.transport.NoNodeAvailableException: None of the configured nodes are available: []
at org.elasticsearch.client.transport.TransportClientNodesService.ensureNodesAreAvailable(TransportClientNodesService.java:305)
at org.elasticsearch.client.transport.TransportClientNodesService.execute(TransportClientNodesService.java:200)
at org.elasticsearch.client.transport.support.InternalTransportClient.execute(InternalTransportClient.java:106)
at org.elasticsearch.client.support.AbstractClient.index(AbstractClient.java:102)
at org.elasticsearch.client.transport.TransportClient.index(TransportClient.java:340)
at com.sksamuel.elastic4s.IndexDsl$IndexDefinitionExecutable$$anonfun$apply$1.apply(IndexDsl.scala:23)
at com.sksamuel.elastic4s.IndexDsl$IndexDefinitionExecutable$$anonfun$apply$1.apply(IndexDsl.scala:23)
at com.sksamuel.elastic4s.Executable$class.injectFuture(Executable.scala:21)
at com.sksamuel.elastic4s.IndexDsl$IndexDefinitionExecutable$.injectFuture(IndexDsl.scala:20)
at com.sksamuel.elastic4s.IndexDsl$IndexDefinitionExecutable$.apply(IndexDsl.scala:23)
at com.sksamuel.elastic4s.IndexDsl$IndexDefinitionExecutable$.apply(IndexDsl.scala:20)
at com.sksamuel.elastic4s.ElasticClient.execute(ElasticClient.scala:28)
Here is my Code which I use for connection:
val settings = ImmutableSettings.settingsBuilder()
.put("cluster.name", "elasticsearch")
.build()
val client = ElasticClient.remote(settings, ElasticsearchClientUri("elasticsearch://10.50.xxx.xxx:9300"))
I also checked my connection and I am able to successfully telnet 10.50.xxx.xxx on both 9200 and 9300 ports
I read somewhere that the problem might be with http.cors, So I added following lines to /etc/elasticsearch/elasticsearch.yml file on the server:
http.cors.allow-origin: "/.*/"
http.cors.enabled: true
Please suggest what am I doing wrong ?
-- Update --
Thanks # Evaldas Buinauskas, It was version problem, I had installed elastic version 2.0 and was using libraries and plugins of version 1.7. I downgraded my elastic to version 1.7 and everything worked!
The issue comes from different Elasticsearch, head plugin and Scala client versions.
In pre 2.0 Elasticsearch still supported deprecated _status endpoint (deprecated in 1.2.0)
Version 2.0 completely dropped it and replaced it with _recovery.
Both head and Scala weren't upgraded and tried to call dropped api.

pe_upgrade based module not being applied

OS: Oracle Linux (hey, I'd have preferred CentOS)
Puppet Enterprise 3.3.0 with puppetlabs-stdlib (v4.3.2)
The puppetlabs-pe_upgrade module should allow me to update the puppet enterprise client software on my target nodes, so I wrote this module.
It lives in /etc/puppetlabs/puppet/modules/eeep_upgrade and all it's files are owned by root:pe-puppet. For some reason, the module is apparently not being added to the catalog during runs. I ran 'puppet agent -t --debug' and nothing is executed nor are errors generated. 'puppet parser validate' and puppet-lint and neither found any errors. I probably have an extra colon somewhere.
class { '::pe_upgrade:eeep_pupgrade':
version => '3.6.2',
answersfile => 'pe/answers/agent.txt.erb',
download_dir => 'puppet:///eeep_pupgrade/files/pe/3.6.2',
timeout => '3600',
}

PHP Fatal error: Class 'MongoDate' not found

I use lithium console (lithium/console/li3) to run some command and I get this error:
PHP Fatal error: Class 'MongoDate' not found
My system details:
mongodb server: 2.6.1
php mongodb client: 1.5.2
apache 2.4.7
php 5.5.9-1ubuntu4
$Requests = Requests::find('all', array('conditions'=>array(
'expired'=>array('<'=>new \MongoDate(time())),
'processed'=>0
)));
I don't have this error while running this code in older version system
PHP Version 5.3.10-1ubuntu3.11
Apache/2.2.22 (Ubuntu) Server
mongodb client: 1.4.5
mongodb server: 2.4.10
Thank you.
One more thing: I try to create just a simple script
$date = new MongoDate();
it runs without problem via webserver (browser) but if I use php command to run this file, I get the same error: Class 'MongoDate' not found
So I believe that it's php command problem.
For people that have come here using PHP7, the classs has been renamed:
MongoDate is now MongoDB\BSON\UTCDateTime
Also I've found that this now wants miliseconds instead of seconds, so make sure you multiple your input by 1000, for example:
$date = new \MongoDB\BSON\UTCDateTime(strtotime('yesterday') * 1000);
Make sure your mongodb extension is loaded.
var_dump(extension_loaded('mongodb'));
If not, you must load it in php.ini.

Running meteor from a checkout

I'm trying to run meteor from a checkout following the instructions on the main README: https://github.com/meteor/meteor (under Slow Start.) I'm trying to run the devel branch.
When running normal meteor, it starts up a mongo instance using the database stored in the .meteor directory of the current project. However, the checked out version throws the following error:
W20130729-16:18:46.369(-4)?(STDERR) /home/mao/projects/CrowdMapper/.meteor/local/build/programs/server/boot.js:184
W20130729-16:18:46.370(-4)?(STDERR) }).run();
W20130729-16:18:46.371(-4)?(STDERR) ^
W20130729-16:18:46.393(-4)?(STDERR) Error: MONGO_URL must be set in environment
W20130729-16:18:46.395(-4)?(STDERR) at packages/mongo-livedata/remote_collection_driver.js:32
W20130729-16:18:46.395(-4)?(STDERR) at _.once (packages/underscore/underscore.js:704)
W20130729-16:18:46.396(-4)?(STDERR) at new Meteor.Collection (packages/mongo-livedata/collection.js:65)
W20130729-16:18:46.396(-4)?(STDERR) at packages/service-configuration/service_configuration_common.js:8
W20130729-16:18:46.397(-4)?(STDERR) at packages/service-configuration.js:42:4
W20130729-16:18:46.397(-4)?(STDERR) at packages/service-configuration.js:51:3
W20130729-16:18:46.397(-4)?(STDERR) at mains (/home/mao/projects/CrowdMapper/.meteor/local/build/programs/server/boot.js:153:10)
W20130729-16:18:46.399(-4)?(STDERR) at Array.forEach (native)
W20130729-16:18:46.400(-4)?(STDERR) at Function._.each._.forEach (/home/mao/projects/meteor/dev_bundle/lib/node_modules/underscore/underscore.js:79:11)
W20130729-16:18:46.400(-4)?(STDERR) at /home/mao/projects/CrowdMapper/.meteor/local/build/programs/server/boot.js:80:5
How can I tell this version to use the project-local mongo database and start its own mongo instance as before?
This was caused by a breaking change in the devel branch as documented here:
https://groups.google.com/forum/#!topic/meteor-core/xtTlpFqp4to
This is because Meteor 0.6.5-rc's and later don't automatically include core dependencies that were listed for free before. It can be fixed with
meteor add standard-app-packages
or
meteor run-upgrader app-packages