2017-02-02 3 views
0

У меня есть приложение без рельсов, которое я пытаюсь развернуть. Он использует eventmachine и демоны. Я использую mina для развертывания, и сервер настроен на использование RVM.`require ': не удается загрузить такой файл - <gemname> приложение non-rails на сервере

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

[email protected]:/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>' 

Содержимое для файла являются

[email protected]:/var/www/myapp/current$ cat bin/run_control.rb 
require 'daemons' 

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

РВМ Информация

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 <[email protected]>, Michal Papis <[email protected]> [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/[email protected]/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/[email protected]" 
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 

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

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[[email protected]]' 
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 

ответ

2

При использовании Bundler установить драгоценные камни снаружи, если глобальное гем магазин Руби, вы также должны адаптировать $LOAD_PATH к включить это пользовательское местоположение, прежде чем вы сможете потребовать драгоценный камень.

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

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

bundle exec bin/run_control.rb start 
+0

В нем говорится: «bundler: not executable: bin/run_control.rb», когда я пытаюсь выполнить «bundle exec bin/run_control.rb start». Скрипт run_control.rb является исполняемым. –

+0

его пучок exec ruby ​​bin/run_control.rb start. Благодарю. –

+1

Хорошая практика для исполняемых скриптов: (1) иметь исполняемый флаг и (2) включать в себя строку shebang, такую ​​как '#!/Usr/bin/env ruby' в первой строке. С этими двумя изменениями ваш сценарий также можно запустить без указания «ruby» сначала, или в вашем случае просто как «bundle exec bin/run_control.rb start». –