This is tricky as I'm using about 500 things, but I have a Vagrant box which is set up to handle what equates to 10 nodes (different servers). It's one box which locally does everything, then I split it up to different servers in production and staging.
Currently I cannot get graylog2 to use rbenv via the Chef setup. I have rbenv installed, I have bundle install running using the rbenv shims and the gems are all installed. But, the actual running application is erroring like this:
The chef recipe looks like this:
# Install required APT packages
package "build-essential"
package "postfix"
include_recipe "rbenv::default"
include_recipe "rbenv::ruby_build"
use_ruby_version = "1.9.3-p327"
rbenv_ruby use_ruby_version
# Install gem dependencies
%w{ bundler rake }.each do |g|
rbenv_gem "#{g}" do
ruby_version "#{use_ruby_version}"
end
end
# Create the release directory
directory "#{node.graylog2.basedir}/rel" do
mode 0755
recursive true
end
# Download the desired version of Graylog2 web interface from GitHub
remote_file "download_web_interface" do
path "#{node.graylog2.basedir}/rel/graylog2-web-interface-#{node.graylog2.web_interface.version}.tar.gz"
source "https://github.com/downloads/Graylog2/graylog2-web-interface/graylog2-web-interface-#{node.graylog2.web_interface.version}.tar.gz"
action :create_if_missing
end
# Unpack the desired version of Graylog2 web interface
execute "tar zxf graylog2-web-interface-#{node.graylog2.web_interface.version}.tar.gz" do
cwd "#{node.graylog2.basedir}/rel"
creates "#{node.graylog2.basedir}/rel/graylog2-web-interface-#{node.graylog2.web_interface.version}/build_date"
action :nothing
subscribes :run, resources(:remote_file => "download_web_interface"), :immediately
end
# Link to the desired Graylog2 web interface version
link "#{node.graylog2.basedir}/web" do
to "#{node.graylog2.basedir}/rel/graylog2-web-interface-#{node.graylog2.web_interface.version}"
end
# Perform bundle install on the newly-installed Graylog2 web interface version
bash "bundle install" do
cwd "#{node.graylog2.basedir}/web"
code "rbenv local #{use_ruby_version} && source /etc/profile.d/rbenv.sh && bundle install"
subscribes :run, resources(:link => "#{node.graylog2.basedir}/web"), :immediately
end
# Create mongoid.yml
template "#{node.graylog2.basedir}/web/config/mongoid.yml" do
mode 0644
end
# Create general.yml
template "#{node.graylog2.basedir}/web/config/general.yml" do
owner "nobody"
group "nogroup"
mode 0644
end
# Chown the Graylog2 directory to nobody/nogroup to allow web servers to serve it
execute "sudo chown -R nobody:nogroup graylog2-web-interface-#{node.graylog2.web_interface.version}" do
cwd "#{node.graylog2.basedir}/rel"
not_if do
File.stat("#{node.graylog2.basedir}/rel/graylog2-web-interface-#{node.graylog2.web_interface.version}").uid == 65534
end
action :nothing
subscribes :run, resources(:bash => "bundle install"), :immediately
end
# Stream message rake tasks
cron "Graylog2 send stream alarms" do
minute node[:graylog2][:stream_alarms_cron_minute]
action node[:graylog2][:send_stream_alarms] ? :create : :delete
command "cd #{node[:graylog2][:basedir]}/web && RAILS_ENV=production bundle exec rake streamalarms:send"
end
cron "Graylog2 send stream subscriptions" do
minute node[:graylog2][:stream_subscriptions_cron_minute]
action node[:graylog2][:send_stream_subscriptions] ? :create : :delete
command "cd #{node[:graylog2][:basedir]}/web && RAILS_ENV=production bundle exec rake subscriptions:send"
end
This is mostly the same as the original with the difference that it uses rbenv local
in the bash "bundle install"
chef resource.
So... if it's intalled, and running... how the heck do I make Rails know about said gems when it runs? Is that even the problem in the screenshot? What is happening and how do I fix it?