通过systemd启动时,sinatra不会加载配置数据

时间:2016-06-22 11:32:23

标签: ruby sinatra bundle systemd

我有一个sinatra应用程序。当通过捆绑器本地加载时,一切都很好。当我通过systemd加载应用程序应用程序启动,但配置文件似乎没有加载。它表示在日志中已加载但值在应用程序内部不可用

单位档案:

[Unit]
Description=PNL: Puppet Node Lister
After=network.target

[Service]
Type=simple
ExecStart=/bin/bundle exec ruby puppetdb_node_lister.rb
KillMode=process
Environment=RACK_ENV="production"
Restart=always
User=pnl
Group=pnl
WorkingDirectory=/opt/puppetdb_node_lister

[Install]
WantedBy=multi-user.target

我的sinatra app:

require 'rubygems'
require 'sinatra'
require 'sinatra/config_file'
require 'json'
require 'rest-client'
require 'date'
require 'time'
require 'active_support/time_with_zone'
require 'tilt/erb'

### local methods
require_relative 'lib/methods.rb'

config_file 'config.yaml'

### request area
get '/' do
 "#{settings.methods(false).inspect} <br/><br/> #{$:} <br/><br/> #{File.expand_path(File.dirname(__FILE__))}"

end

我的yaml:

development:
  username: 'test'
  password: 'test'
  puppetdb: 'puppet.example.com'
  puppetsrv: 'puppet.example.com'
production:
  username: 'superadmin'
  password: 'somes3cret'
  puppetdb: 'puppet.example.com'
  puppetsrv: 'puppet.example.com'

/

的本地捆绑输出
[:app_file=, :app_file, :app_file?, :logging=, :logging, :logging?, :method_override=, :method_override, :method_override?, :run=, :run, :run?, :session_secret=, :session_secret, :session_secret?, :register, :environments=, :environments, :environments?, :username=, :username, :username?, :password=, :password, :password?, :puppetdb=, :puppetdb, :puppetdb?, :puppetsrv=, :puppetsrv, :puppetsrv?, :traps=, :traps, :traps?, :running_server=, :running_server, :running_server?, :handler_name=, :handler_name, :handler_name?] 

["/opt/puppetdb_node_lister/vendor/bundle/ruby/gems/sinatra-contrib-1.4.7/lib", "/opt/puppetdb_node_lister/vendor/bundle/ruby/gems/sinatra-1.4.7/lib", "/opt/puppetdb_node_lister/vendor/bundle/ruby/gems/tilt-2.0.4/lib", "/opt/puppetdb_node_lister/vendor/bundle/ruby/gems/rubygems-update-2.6.4/hide_lib_for_update", "/opt/puppetdb_node_lister/vendor/bundle/ruby/gems/rest-client-1.8.0/lib", "/opt/puppetdb_node_lister/vendor/bundle/ruby/gems/rack-test-0.6.3/lib", "/opt/puppetdb_node_lister/vendor/bundle/ruby/gems/rack-protection-1.5.3/lib", "/opt/puppetdb_node_lister/vendor/bundle/ruby/gems/rack-1.6.4/lib", "/opt/puppetdb_node_lister/vendor/bundle/ruby/gems/netrc-0.11.0/lib", "/opt/puppetdb_node_lister/vendor/bundle/ruby/gems/multi_json-1.12.1/lib", "/opt/puppetdb_node_lister/vendor/bundle/ruby/gems/mime-types-2.99.2/lib", "/opt/puppetdb_node_lister/vendor/bundle/ruby/gems/http-cookie-1.0.2/lib", "/opt/puppetdb_node_lister/vendor/bundle/ruby/gems/domain_name-0.5.20160310/lib", "/opt/puppetdb_node_lister/vendor/bundle/ruby/gems/unf-0.1.4/lib", "/opt/puppetdb_node_lister/vendor/bundle/ruby/gems/unf_ext-0.0.7.2/lib", "/opt/puppetdb_node_lister/vendor/bundle/ruby/gems/unf_ext-0.0.7.2/lib", "/usr/share/gems/gems/bundler-1.7.8/lib/gems/bundler-1.7.8/lib", "/opt/puppetdb_node_lister/vendor/bundle/ruby/gems/backports-3.6.8/lib", "/opt/puppetdb_node_lister/vendor/bundle/ruby/gems/activesupport-4.2.6/lib", "/opt/puppetdb_node_lister/vendor/bundle/ruby/gems/tzinfo-1.2.2/lib", "/opt/puppetdb_node_lister/vendor/bundle/ruby/gems/thread_safe-0.3.5/lib", "/opt/puppetdb_node_lister/vendor/bundle/ruby/gems/minitest-5.9.0/lib", "/opt/puppetdb_node_lister/vendor/bundle/ruby/gems/json-1.8.3/lib", "/opt/puppetdb_node_lister/vendor/bundle/ruby/gems/json-1.8.3/lib", "/opt/puppetdb_node_lister/vendor/bundle/ruby/gems/i18n-0.7.0/lib", "/usr/share/gems/gems/bundler-1.7.8/lib", "/usr/local/share/ruby/site_ruby", "/usr/local/lib64/ruby/site_ruby", "/usr/share/ruby/vendor_ruby", "/usr/lib64/ruby/vendor_ruby", "/usr/share/rubygems", "/usr/share/ruby", "/usr/lib64/ruby/"] 

/opt/puppetdb_node_lister

/

的systemd输出
[:app_file=, :app_file, :app_file?, :logging=, :logging, :logging?, :method_override=, :method_override, :method_override?, :run=, :run, :run?, :session_secret=, :session_secret, :session_secret?, :register, :environments=, :environments, :environments?, :traps=, :traps, :traps?, :running_server=, :running_server, :running_server?, :handler_name=, :handler_name, :handler_name?] 

["/opt/puppetdb_node_lister/vendor/bundle/ruby/gems/sinatra-contrib-1.4.7/lib", "/opt/puppetdb_node_lister/vendor/bundle/ruby/gems/sinatra-1.4.7/lib", "/opt/puppetdb_node_lister/vendor/bundle/ruby/gems/tilt-2.0.4/lib", "/opt/puppetdb_node_lister/vendor/bundle/ruby/gems/rubygems-update-2.6.4/hide_lib_for_update", "/opt/puppetdb_node_lister/vendor/bundle/ruby/gems/rest-client-1.8.0/lib", "/opt/puppetdb_node_lister/vendor/bundle/ruby/gems/rack-test-0.6.3/lib", "/opt/puppetdb_node_lister/vendor/bundle/ruby/gems/rack-protection-1.5.3/lib", "/opt/puppetdb_node_lister/vendor/bundle/ruby/gems/rack-1.6.4/lib", "/opt/puppetdb_node_lister/vendor/bundle/ruby/gems/netrc-0.11.0/lib", "/opt/puppetdb_node_lister/vendor/bundle/ruby/gems/multi_json-1.12.1/lib", "/opt/puppetdb_node_lister/vendor/bundle/ruby/gems/mime-types-2.99.2/lib", "/opt/puppetdb_node_lister/vendor/bundle/ruby/gems/http-cookie-1.0.2/lib", "/opt/puppetdb_node_lister/vendor/bundle/ruby/gems/domain_name-0.5.20160310/lib", "/opt/puppetdb_node_lister/vendor/bundle/ruby/gems/unf-0.1.4/lib", "/opt/puppetdb_node_lister/vendor/bundle/ruby/gems/unf_ext-0.0.7.2/lib", "/opt/puppetdb_node_lister/vendor/bundle/ruby/gems/unf_ext-0.0.7.2/lib", "/usr/share/gems/gems/bundler-1.7.8/lib/gems/bundler-1.7.8/lib", "/opt/puppetdb_node_lister/vendor/bundle/ruby/gems/backports-3.6.8/lib", "/opt/puppetdb_node_lister/vendor/bundle/ruby/gems/activesupport-4.2.6/lib", "/opt/puppetdb_node_lister/vendor/bundle/ruby/gems/tzinfo-1.2.2/lib", "/opt/puppetdb_node_lister/vendor/bundle/ruby/gems/thread_safe-0.3.5/lib", "/opt/puppetdb_node_lister/vendor/bundle/ruby/gems/minitest-5.9.0/lib", "/opt/puppetdb_node_lister/vendor/bundle/ruby/gems/json-1.8.3/lib", "/opt/puppetdb_node_lister/vendor/bundle/ruby/gems/json-1.8.3/lib", "/opt/puppetdb_node_lister/vendor/bundle/ruby/gems/i18n-0.7.0/lib", "/usr/share/gems/gems/bundler-1.7.8/lib", "/usr/local/share/ruby/site_ruby", "/usr/local/lib64/ruby/site_ruby", "/usr/share/ruby/vendor_ruby", "/usr/lib64/ruby/vendor_ruby", "/usr/share/rubygems", "/usr/share/ruby", "/usr/lib64/ruby/"] 

/opt/puppetdb_node_lister

可以看到,如果通过systemd加载,设置中的值(将来自yaml)将丢失。

任何人都可以帮助我吗?我这样做是对,还是我错过了什么?

2 个答案:

答案 0 :(得分:1)

毕竟它是

Environment=RACK_ENV="production"

应该更像

Environment=RACK_ENV=production

在这次改变之后,一切都按预期工作了!

答案 1 :(得分:0)

您的systemd配置对我来说很好。您可以正确设置环境变量和WorkingDirectory。

将您的应用程序替换为刚刚转储出环境和当前目录的应用程序。通过bundler运行此测试应用程序,也可以通过systemd运行。

您应该发现systemd正在设置的环境与您的备用方法之间仍然存在一些差异。解决差异。 :)