Issue: SSHKit::Backend::Netssh binding change in run method breaks lookup in 'normal' block scope
还没有人认领这个 Issue。
评估
调研方向
从 SSHKit::Backend::Netssh#run 开始,检查 instance_exec 如何改变 block 的 binding。使用 Nginx#upload_files 和 tmp_config_file 重现 cap-task 示例,然后确定预期的 scope 行为,并为 service-object method lookup 添加覆盖。完成标准是封装的 action 可以解析 tmp_config_file,同时现有的 block 行为保持不变。
由索引模型根据 Issue 内容生成。
描述
Hi,
in SSHKit::Backend::Netssh#run instance_exec is used to change the binding of the given block. With this binding change it is difficult to encapsulate an action in a service object for instance you have a cap-task:
desc 'Setup nginx configuration'
task :setup do
Nginx.new(self).setup
end
class Nginx < SimpleDelegator
...
def upload_files
on roles nginx_roles do |host|
set :host_server_name, host.properties.fetch(:host_server_name)
template 'assets.host.site', tmp_config_file
end
end
def tmp_config_file
'remote_file_name'
end
...
end
This does not work because the block is executed in the context of the SSHKit::Backend::Netssh object context and does not know the method tmp_config_file.
Why do I want to do such things? Testing! Rake and Cap tasks are difficult to test.
When I encapsulate the actions I can test the a little.
regards
dieter
- 主要语言
- Ruby
- 星标
- 1.2k
- 派生
- 256
- PR 合并指标
- 30 天内没有已合并 PR
环境准备
- 提供 Dockerfile 或 Docker Compose 文件
- 没有 Pull Request 模板
- 阅读贡献指南
从这里开始
- 先读完整个 Issue,再读项目的贡献指南。
- 在 Issue 下留言说明你要接手 —— 这能避免两个人做同样的事。
- Fork 仓库,在一个分支上完成修改。
- 提交 Pull Request,并在描述里引用这个 Issue 编号。
capistrano/sshkit 的其他 Issue
-
难度 5/5 一周以上 新手友好度 35/100
capistrano/sshkit#563 · 6 个 reaction ·
-
难度 2/5 1-3 小时 新手友好度 45/100
capistrano/sshkit#562 ·
-
难度 3/5 1-2 天 新手友好度 48/100
capistrano/sshkit#554 · 3 条评论 ·
-
难度 3/5 1-2 天 新手友好度 35/100
capistrano/sshkit#543 · 2 条评论 ·
-
难度 2/5 1-3 小时 新手友好度 45/100
capistrano/sshkit#518 · 1 条评论 ·
查看 capistrano/sshkit 的全部 Issue
相似的 Issue
-
难度 2/5 1-3 小时 新手友好度 68/100
Homebrew/homebrew-core#317477 · 2 条评论 ·
维护者通常 1 天内回复
-
area/web interface
难度 2/5 1-3 小时 新手友好度 62/100
mastodon/mastodon#41009 · 2 条评论 ·
维护者通常 1 天内回复
-
难度 2/5 1-3 小时 新手友好度 78/100
维护者通常 1 天内回复
-
难度 2/5 1-3 小时 新手友好度 82/100
yegor256/ellipsized#131 ·
-
难度 2/5 1-3 小时 新手友好度 85/100