`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