我试图使用mina gem将rails app部署到数字海洋。我做了所有的配置和mina设置也正在执行。
mina deploy抛出错误。任何帮助将不胜感激。
这是mina deploy --trace
root@ruby-rails-1gb-blr1-01:/home/rails/rails-demo# mina deploy --trace
** Invoke deploy (first_time)
** Execute deploy
** Invoke remote_environment (first_time)
** Execute remote_environment
** Invoke git:clone (first_time)
** Execute git:clone
** Invoke deploy:link_shared_paths (first_time)
** Execute deploy:link_shared_paths
** Invoke bundle:install (first_time)
** Execute bundle:install
** Invoke rails:db_migrate (first_time)
** Execute rails:db_migrate
** Invoke rails:assets_precompile (first_time)
** Execute rails:assets_precompile
** Invoke deploy:cleanup (first_time)
** Execute deploy:cleanup
** Invoke puma:phased_restart (first_time)
** Invoke remote_environment (first_time)
** Execute remote_environment
** Execute puma:phased_restart
root@139.59.72.156's password:
-----> Creating a temporary build path
-----> Deploying rails-demo to 139.59.72.156:/home/rails/rails-demo
-----> Fetching new git commits
remote: Counting objects: 43, done.
remote: Compressing objects: 100% (33/33), done.
remote: Total 43 (delta 6), reused 43 (delta 6), pack-reused 0
Unpacking objects: 100% (43/43), done.
From github.com:krishnateja/rails-demo
739096a..4cf74f8 master -> master
-----> Using git branch 'master'
Cloning into '.'...
done.
-----> Using this git commit
root (4cf74f8):
> small config change
-----> Symlinking shared paths
-----> Installing gem dependencies using Bundler
bash: line 137: bundle: command not found
! ERROR: Deploy failed.
-----> Cleaning up build
Unlinking current
OK
Connection to 139.59.72.156 closed.
! Run Error
deploy.rb
require 'mina/bundler'
require 'mina/rails'
require 'mina/git'
require 'mina/rvm'
require 'mina/puma'
set :application_name, 'rails-demo'
set :domain, '139.59.72.156'
set :deploy_to, '/home/rails/rails-demo'
set :repository, 'git@github.com:krishnateja/rails-demo.git'
set :shared_dirs, fetch(:shared_dirs, []).push('log', 'tmp/pids', 'tmp/sockets', 'public/uploads')
set :shared_files, fetch(:shared_files, []).push('config/database.yml', 'config/secrets.yml', 'config/puma.rb')
set :user, 'root'
task :environment do
invoke :'rvm:use', 'ruby-2.2.3'
end
task :setup do
command %[touch "#{fetch(:shared_path)}/config/database.yml"]
command %[touch "#{fetch(:shared_path)}/config/secrets.yml"]
command %[touch "#{fetch(:shared_path)}/config/puma.rb"]
comment "Be sure to edit '#{fetch(:shared_path)}/config/database.yml', 'secrets.yml' and puma.rb."
end
task :deploy do
deploy do
comment "Deploying #{fetch(:application_name)} to #{fetch(:domain)}:#{fetch(:deploy_to)}"
invoke :'git:clone'
invoke :'deploy:link_shared_paths'
invoke :'bundle:install'
invoke :'rails:db_migrate'
invoke :'rails:assets_precompile'
invoke :'deploy:cleanup'
on :launch do
invoke :'puma:phased_restart'
end
end
end
puma.rb
environment "production"
bind "unix:///home/rails/rails-demo/shared/tmp/sockets/puma.sock"
pidfile "/home/rails/rails-demo/shared/tmp/pids/puma.pid"
state_path "/home/rails/rails-demo/shared/tmp/sockets/puma.state"
directory "/home/rails/rails-demo/current"
workers 2
threads 1,2
daemonize true
activate_control_app 'unix:///home/rails/rails-demo/shared/tmp/sockets/pumactl.sock'
prune_bundler
我有些感觉它与可执行目录的路径有关,因此做了这个.. 宝石环境 - 给出这个。
root@ruby-rails-1gb-blr1-01:/home/rails/rails-demo# gem environment
RubyGems Environment:
- RUBYGEMS VERSION: 2.6.14
- RUBY VERSION: 2.2.3 (2015-08-18 patchlevel 173) [x86_64-linux]
- INSTALLATION DIRECTORY: /usr/local/rvm/gems/ruby-2.2.3
- USER INSTALLATION DIRECTORY: /root/.gem/ruby/2.2.0
- RUBY EXECUTABLE: /usr/local/rvm/rubies/ruby-2.2.3/bin/ruby
- EXECUTABLE DIRECTORY: /usr/local/rvm/gems/ruby-2.2.3/bin
- SPEC CACHE DIRECTORY: /root/.gem/specs
- SYSTEM CONFIGURATION DIRECTORY: /usr/local/rvm/rubies/ruby-2.2.3/etc
- RUBYGEMS PLATFORMS:
- ruby
- x86_64-linux
- GEM PATHS:
- /usr/local/rvm/gems/ruby-2.2.3
- /usr/local/rvm/gems/ruby-2.2.3@global
- GEM CONFIGURATION:
- :update_sources => true
- :verbose => true
- :backtrace => false
- :bulk_threshold => 1000
- REMOTE SOURCES:
- https://rubygems.org/
- SHELL PATH:
- /usr/local/rvm/gems/ruby-2.2.3/bin
- /usr/local/rvm/gems/ruby-2.2.3@global/bin
- /usr/local/rvm/rubies/ruby-2.2.3/bin
- /usr/local/rvm/bin
- /usr/local/sbin
- /usr/local/bin
- /usr/sbin
- /usr/bin
- /sbin
- /bin
- /usr/games
- /usr/local/games
- /snap/bin
为路径添加了EXECUTABLE DIRECTORY。
root@ruby-rails-1gb-blr1-01:/home/rails/rails-demo# export PATH=$PATH:/usr/local/rvm/gems/ruby-2.2.3/bin
root@ruby-rails-1gb-blr1-01:/home/rails/rails-demo# echo $PATH
/usr/local/rvm/gems/ruby-2.2.3/bin:/usr/local/rvm/gems/ruby-2.2.3@global/bin:/usr/local/rvm/rubies/ruby-2.2.3/bin:/usr/local/rvm/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin:/usr/local/rvm/gems/ruby-2.2.3/bin
答案 0 :(得分:0)
必须在您的服务器计算机上安装Bundler(您尝试部署的计算机)。最简单的方法是通过ssh登录并运行gem install bundler
一次。它被列为official mina FAQ
答案 1 :(得分:0)
我也有这个问题,并通过将我的启动任务移动到单独的任务来解决它。所以你可以通过转动
来做到这一点task :deploy do
deploy do
comment "Deploying #{fetch(:application_name)} to #{fetch(:domain)}:#{fetch(:deploy_to)}"
invoke :'git:clone'
invoke :'deploy:link_shared_paths'
invoke :'bundle:install'
invoke :'rails:db_migrate'
invoke :'rails:assets_precompile'
invoke :'deploy:cleanup'
on :launch do
invoke :'puma:phased_restart'
end
end
end
到
task :deploy do
deploy do
comment "Deploying #{fetch(:application_name)} to #{fetch(:domain)}:#{fetch(:deploy_to)}"
invoke :'git:clone'
invoke :'deploy:link_shared_paths'
invoke :'bundle:install'
invoke :'rails:db_migrate'
invoke :'rails:assets_precompile'
invoke :'deploy:cleanup'
end
end
task :launch do
invoke :'puma:phased_restart'
end
然后单独执行它(这当然不是最理想的):
$ mina deploy
$ mina launch
我不知道你的任务的细节,但我这样配置我的:
task :launch => :remote_environment do
in_path(fetch(:current_path)) do
invoke :'my:task'
end
end
我知道这不是一个解决方案或解释,但希望它有所帮助。
答案 2 :(得分:0)
对我来说,问题在于rbenv没有被加载。
如果您确定像我一样在服务器上正确安装了ruby和bundler,那么解决方法是确保您的shell要做的第一件事就是加载rbenv。
打开.bashrc
确保先调用以下
# If not running interactively, don't do anything
export PATH="$HOME/.rbenv/bin:$PATH"
eval "$(rbenv init -)"