1

这很棘手,因为我使用了大约 500 个东西,但是我有一个 Vagrant 盒子,它被设置为处理相当于 10 个节点(不同服务器)的东西。它是一个可以在本地完成所有工作的盒子,然后我将其拆分到生产和登台的不同服务器上。

目前我无法通过 Chef 设置让 graylog2 使用 rbenv。我已经安装了 rbenv,我已经使用 rbenv shims 运行了 bundle install,并且所有 gem 都安装了。但是,实际运行的应用程序错误如下:

关于打包机的乘客错误

厨师食谱如下所示:

# 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

这与原始版本基本相同,但rbenv localbash "bundle install"厨师资源中使用的不同。

所以......如果它已安装并正在运行......我怎么能让 Rails 在运行时知道所说的宝石?这甚至是屏幕截图中的问题吗?发生了什么,我该如何解决?

4

2 回答 2

2

It's likely that the way you're starting Graylog2 doesn't properly invoke rbenv first. The easiest way to do that, as per the rbenv wiki page, is to bundle install with binstubs. So I'd change your bundle install line to look more like:

bundle install --deployment --binstubs

You didn't include the command you use to start your server. (Are you using Apache? Unicorn?) If Unicorn or Thin or some other server you can easily start on demand, your problems are nearly solved. Simply start the app through the rbenv wrapper and it should execute with the proper rbenv:

/path/to/my/current/bin/unicorn

于 2013-06-13T15:03:20.233 回答
0

我添加了以下内容:

LoadModule passenger_module /opt/rbenv/versions/<%= node[:graylog2][:ruby_version] %>/lib/ruby/gems/1.9.1/gems/passenger-4.0.5/libout/apache2/mod_passenger.so
PassengerRoot /opt/rbenv/versions/<%= node[:graylog2][:ruby_version] %>/lib/ruby/gems/1.9.1/gems/passenger-4.0.5
PassengerDefaultRuby /opt/rbenv/versions/<%= node[:graylog2][:ruby_version] %>/bin/ruby

我正在向 graylog2 食谱发送一个拉取请求,它将很快处理所有这些,并希望它被接受。

于 2013-06-13T17:50:48.117 回答