部署 Mina 升 1.0 后的差异

lithium4010 · 2017年01月18日 · 最后由 chinakr 回复于 2017年03月27日 · 3216 次阅读

invoke 'bundle:install'

before 0.3.x

echo "-----> Installing gem dependencies using Bundler"
    mkdir -p "/root/server/project/shared/bundle"
    mkdir -p "./vendor"
    ln -s "/root/server/project/shared/bundle" "./vendor/bundle"
    bundle install --without development:test --path "./vendor/bundle" --deployment

after 1.x

echo "-----> Installing gem dependencies using Bundler" &&
  bundle install --without development test --path "vendor/bundle" --deployment

可以看出旧版的 bundle 会复用,而新版每次都重装一遍新的

仅仅从 log 判断的么? 有没有登陆到服务器上去查一下每个历史版本中是不是都包含一份 vendor/bundle ? 如果是的话,可以去提交一个 issue 了。

1.x 有很多莫名其妙的问题,然后我又降回了 0.3

可以负责任的告诉你,不会每次重装一遍新的。

#3 楼 @mingyuan0715 略微有点差异 我还是默默的用 0.3 吧

#1 楼 @lgn21st mina deploy -s 看生成的 shell 脚本,没有检查每个历史版本,但是部署的时候会重新 install 一遍所有的 gem,时间很久

#3 楼 @mingyuan0715 我用的时候确实是每次装一遍新的,然后才来找原因

之前发现升级后语法有变化,我就锁在 0.3 了。一个部署工具而已,能用就行,没什么必要升级

你就不能发给完整的部署过程,拿出一段来看有点片面,看源码应该没问题:shared_dirs, link_shared_paths,

#9 楼 @0x005a 明白了问题,我还用了 mina-multistage

需要配置 shared dir, set :shared_dirs, ['log', 'vendor']

#11 楼 @u1450154824 嗯,和之前版本的差异,也没有写在升级文档里

#12 楼 @lithium4010 no,文档有提及。原文:if you do not want for bundle to install gems copy current/vendor/bundle to /shared/vendor/bundle. 链接:https://github.com/mina-deploy/mina/blob/master/docs/migrating.md

#13 楼 @u1450154824 文档没有提供正确的解决方法,我盯着这一句看了好几分钟,没有 get 到这里的 copy 是什么意思。看源码可以发现差异是过去默认会做软链接,新版利用 shared_dir 来实现。我这里的状况是,当使用 mina_multistage 并且手动 set :shared_dirs, ['log', 'tmp'],新版的默认软链到 vendor/bundle 就失效了。而且从源码看来,作者是希望利用 shared_dir 来实现默认就软链 bundle 而不需要使用者关注的。

需要 shared set :shared_dirs, %w(vendor/bundle) 我升级之后也是折腾了好一会

16 楼 已删除

#4 楼 @so_zengtao 你居然也用 0.3,不用 1.0

#17 楼 @crazyphage 升级也简单的 mina 的几个命令改了 不过既然没有感觉有实质性的差别的话 我还是沿用老的就好了。

提供一个可用的 Mina 1.0 的配置文件:

require 'mina/bundler'
require 'mina/rails'
require 'mina/git'
require 'mina/rvm'
require 'mina/puma'
require 'mina/logs'

set :domain, 'www.haijia.org'
set :user, 'deploy'
set :deploy_to, '/home/deploy/www.haijia.org/haijia'
set :repository, '[email protected]:chinakr/haijia.git'    # private repository
set :branch, 'master'

set :shared_dirs, fetch(:shared_dirs, []).push('public/upload', 'tmp/sockets', 'tmp/pids', 'db/production')
set :shared_files, fetch(:shared_files, []).push('config/database.yml', 'config/secrets.yml')

desc 'Set up environment.'
task :environment do
  invoke :'rvm:use', 'ruby-2.4.1@rails5'
end

desc 'Prepare for deployment.'
task :setup do
  in_path "#{fetch(:shared_path)}" do
    ['config/database.yml', 'config/secrets.yml'].each do |file|
      comment %{Be sure to edit 'shared/#{file}'.}
    end
  end
end

desc 'Deploy current version to the server.'
task :deploy => :environment do
  deploy do
    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:start'
      invoke :'puma:phased_restart'
    end
  end
end

需要注意的是 https://github.com/mina-deploy/mina/blob/master/tasks/mina/bundler.rb 中已经包含了 set :bundle_path, 'vendor/bundle',所以在设置 shared_dirs 要使用 set :shared_dirs, fetch(:shared_dirs, []).push('tmp/sockets', 'tmp/pids') 而不是 set :shared_dirs, ['vendor/bundle', 'tmp/sockets', 'tmp/pids']。这样就不会出现 mina deploy 时每次都重新 bundle 的问题了。

需要 登录 后方可回复, 如果你还没有账号请 注册新账号