`require': не может загрузить такой файл - приложение <gemname> non-rails на сервере

У меня есть приложение не рельсы, которые я пытаюсь развернуть. Он использует eventmachine и демонов. Я использую mina для развертывания, и сервер настроен на использование RVM.

Когда я пытаюсь выполнить

ubuntu@ip-999-99-9-99:/var/www/myapp/current$ ruby bin/run_control.rb start

Не в состоянии заявить

/usr/local/rvm/rubies/ruby-2.2.0/lib/ruby/site_ruby/2.2.0/rubygems/core_ext/kernel_require.rb:55:in `require': cannot load such file -- daemons (LoadError)
from /usr/local/rvm/rubies/ruby-2.2.0/lib/ruby/site_ruby/2.2.0/rubygems/core_ext/kernel_require.rb:55:in `require'
from bin/run_control.rb:1:in `<main>'

Содержимое файла

ubuntu@ip-999-99-9-99:/var/www/myapp/current$ cat bin/run_control.rb
require 'daemons'

Daemons.run('bin/run.rb')

Информация о RVM

ruby-2.2.0:

system:
uname:       "Linux ip-999-99-9-99 4.4.0-53-generic #74-Ubuntu SMP Fri Dec 2 15:59:10 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux"
system:      "ubuntu/16.04/x86_64"
bash:        "/bin/bash => GNU bash, version 4.3.46(1)-release (x86_64-pc-linux-gnu)"
zsh:         " => not installed"

rvm:
version:      "rvm 1.28.0 (latest) by Wayne E. Seguin <wayneeseguin@gmail.com>, Michal Papis <mpapis@gmail.com> [https://rvm.io/]"
updated:      "1 day 7 hours 3 minutes 31 seconds ago"
path:         "/usr/local/rvm"

ruby:
interpreter:  "ruby"
version:      "2.2.0p0"
date:         "2014-12-25"
platform:     "x86_64-linux"
patchlevel:   "2014-12-25 revision 49005"
full_version: "ruby 2.2.0p0 (2014-12-25 revision 49005) [x86_64-linux]"

homes:
gem:          "/usr/local/rvm/gems/ruby-2.2.0"
ruby:         "/usr/local/rvm/rubies/ruby-2.2.0"

binaries:
ruby:         "/usr/local/rvm/rubies/ruby-2.2.0/bin/ruby"
irb:          "/usr/local/rvm/rubies/ruby-2.2.0/bin/irb"
gem:          "/usr/local/rvm/rubies/ruby-2.2.0/bin/gem"
rake:         "/usr/local/rvm/rubies/ruby-2.2.0/bin/rake"

environment:
PATH:         "/usr/local/rvm/gems/ruby-2.2.0/bin:/usr/local/rvm/gems/ruby-2.2.0@global/bin:/usr/local/rvm/rubies/ruby-2.2.0/bin:/usr/local/rvm/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin"
GEM_HOME:     "/usr/local/rvm/gems/ruby-2.2.0"
GEM_PATH:     "/usr/local/rvm/gems/ruby-2.2.0:/usr/local/rvm/gems/ruby-2.2.0@global"
MY_RUBY_HOME: "/usr/local/rvm/rubies/ruby-2.2.0"
IRBRC:        "/usr/local/rvm/rubies/ruby-2.2.0/.irbrc"
RUBYOPT:      ""
gemset:       ""

Драгоценные камни установлены на

:/var/www/myapp/shared/bundle/ruby/2.2.0/gems$ ls
aws-sdk-2.1.1            colorize-0.7.7      i18n-0.7.0                 multi_json-1.11.1  rspec-3.2.0               rspec-support-3.2.1
aws-sdk-core-2.1.1       daemons-1.2.4       jmespath-1.0.2         net-scp-1.2.1      rspec-core-3.2.0          sshkit-1.7.1
aws-sdk-resources-2.1.1  diff-lcs-1.2.5      mina-0.3.4             net-ssh-2.9.2      rspec-expectations-3.2.0
capistrano-3.4.0         eventmachine-1.0.7  mina-multistage-1.0.2  open4-1.3.4        rspec-mocks-3.2.0

Сценарий развертывания мины как

require 'mina/bundler'
require 'mina/git'
require 'mina/rvm'    # for rvm support. (http://rvm.io)

set :rvm_path, '/usr/local/rvm/scripts/rvm'

task :environment do
  invoke :'rvm:use[ruby-2.2.0@default]'
end

desc "Deploys the current version to the server."
task :deploy => :environment do
  deploy do
    invoke :'git:clone'
    invoke :'deploy:link_shared_paths'
    invoke :'bundle:install'
    invoke :'deploy:cleanup'

    to :launch do
      queue "mkdir -p #{deploy_to}/#{current_path}/tmp/"
      queue "touch #{deploy_to}/#{current_path}/tmp/restart.txt"
      invoke :'start_event_machine_server'
    end
  end
end

task :start_event_machine_server do
  queue 'cd /var/www/myapp/current && ruby bin/run_control.rb start'
end

1 ответ

Решение

Когда вы используете bundler для установки драгоценных камней вне глобального хранилища драгоценных камней в Ruby, вам также необходимо адаптировать $LOAD_PATH включить это пользовательское местоположение, прежде чем вы сможете потребовать драгоценный камень.

Наиболее распространенный способ добиться этого - использовать bundle exec, Эта команда поставляется с упаковщиком и адаптирует Ruby $lOAD_PATH включить места расположения всех драгоценных камней, указанных в Gemfile,

Когда вы запустите свой скрипт следующим образом, Ruby сможет найти ваши драгоценные камни (при условии, что ваш bin/run_control.rb скрипт исполняемый).

bundle exec bin/run_control.rb start
Другие вопросы по тегам