【问题标题】:Carrierwave files with Capistrano使用 Capistrano 的 Carrierwave 文件
【发布时间】:2012-01-28 07:22:54
【问题描述】:

我正在使用带有资产和carrierwave的rails 3.2来上传一些图像,它们存储在/public/uploads/photo/..... 但是当我做一个 cap:deploy (with capistrano) 我当前的目录应用程序不包含我上传的文件,因为 capistrano 制作了一个新版本....

=== 更新 ===

毕竟我用这个:

内部:部署命名空间

   task :symlink_uploads do
     run "ln -nfs #{shared_path}/uploads  #{release_path}/public/uploads"
   end

之后:

after 'deploy:update_code', 'deploy:symlink_uploads'

===重新更新===

@tristanm 的解决方案是解决这个问题的最佳方法。

【问题讨论】:

  • 好吧,如您所见,解决方案不在答案中......所以,我不知道我是否必须选择一个。
  • 对 Capistrano 3+ 使用 deploy:finishing

标签: ruby-on-rails ruby-on-rails-3 capistrano carrierwave


【解决方案1】:

这个怎么样:

# config/deploy.rb
set :shared_children, shared_children + %w{public/uploads}

:shared_children 默认为 %w(public/system log tmp/pids),所以我们只是扩展了这个列表。

编辑:

不要忘记在更改:shared_children 后运行cap deploy:setup,以便在shared 下创建新目标。

编辑 Capistrano 3:

Capistrano 3 使用 linked_dirs 设置并且不再将 public/system 指定为默认值。

set :linked_dirs, fetch(:linked_dirs) + %w{public/system public/uploads}

【讨论】:

  • 它确实在共享中创建了上传文件夹,但文件没有保存在那里。我错过了一步吗?
  • 可能是符号链接尚未创建。再次运行cap deploy 并检查releases/current/public/uploads 是否是shared/uploads 的符号链接。另外,请确保您使用的不是真正古老的 Capistrano 版本。
  • 我认为您的解决方案看起来不错,但实际上我没有尝试过,所以对于 UP 投票的数量,我会给您“接受”。谢谢
  • 谢谢!工作,虽然我不得不从头开始重新部署整个应用程序。简单的 cap deploy:setup 不起作用。
  • 我正在使用 capistrano 3。我只将此行添加到 deploy.rb set :linked_dirs, %w{public/uploads}。使用 fetch(:linked_dirs) 部分时出错。
【解决方案2】:

使用 Capistrano 3,无需重新部署。

就像@tristanm 提到的那样,把它添加到你的 config/deploy.rb

# config/deploy.rb
set :linked_dirs, fetch(:linked_dirs) + %w{public/uploads}

让 capistrano 创建共享/公共/上传

cap deploy:check:linked_dirs

现在 cap 可以创建符号链接了

cap deploy:symlink:shared

最后,如果您有上传的备份,您可以将它们放在 shared/public/uploads/ 中,它们应该可以工作而无需重新部署。

【讨论】:

  • 谢谢 Jason,我会在 Capistrano 3 上试试这个。
【解决方案3】:

Capistrano 为每次部署创建新目录。

有一些例外。例如,日志文件在部署目录之间共享,因为它们只是符号链接。您还必须为公共/上传创建符号链接。

命令如下:

run <<-CMD
  rm -rf #{latest_release}/public/uploads &&
  ln -s #{shared_path}/uploads #{latest_release}/public/uploads
CMD

【讨论】:

  • 我必须把它放在 Capistrano 任务中?
【解决方案4】:

转到您的应用服务器共享文件夹并创建上传目录。

mkdir 上传

在您的 deploy.rb 文件中,在 deploy 命名空间下插入这些代码

任务:symlink_uploads 做

运行“rm -rf #{latest_release}/public/uploads && ln -nfs #{shared_pa​​th}/uploads #{latest_release}/public/uploads”

结束

在'deploy:update_code'之后,'deploy:symlink_uploads'

现在删除已经存在的旧文件,因为它们将不起作用。上传一个新文件并再次部署您的应用程序。它现在应该可以工作了。

【讨论】:

    【解决方案5】:

    使用 Capistrano 3,我刚刚将这一行添加到我的 config/deploy.rb

    set :linked_dirs, %w{bin log tmp/pids tmp/cache tmp/sockets vendor/bundle public/system public/uploads}
    

    然后,运行:

    $ cap production deploy
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-05-24
      • 1970-01-01
      • 2013-06-30
      • 2011-10-06
      • 1970-01-01
      • 1970-01-01
      • 2012-02-25
      • 2018-05-26
      相关资源
      最近更新 更多