【问题标题】:Run multiple command lines in ruby在 ruby​​ 中运行多个命令行
【发布时间】:2020-08-04 22:03:06
【问题描述】:

我需要在 docker 中运行多个 Ruby 命令。我通常通过 SSH 做的是:

docker exec -it containername bundle exec rails c

然后运行我的命令。在这种情况下:

SharedAccess.create(room_id: 56, user_id: 2)

问题是我需要使用不同的 user_id 运行多个命令。

SharedAccess.create(room_id: 56, user_id: 3)
SharedAccess.create(room_id: 56, user_id: 4)
SharedAccess.create(room_id: 56, user_id: 5)

我通常会在 shell 中做的是创建一个脚本,将所有行粘贴到另一个下面,然后运行它。 我想找到一种方法来创建一个包含所有行的脚本,然后从 rake(在 docker 内部)运行它。

【问题讨论】:

  • 你可以把你想运行的代码行放在一个rake任务中,不需要另外的脚本。
  • 好吧,这确实有效!谢谢你。把它写成脚本怎么样?
  • 一定要把它放在一个任务中,然后像 docker exec -it containername bundle exec rake migrate:shared_access 一样运行。

标签: ruby-on-rails ruby docker rubygems ruby-on-rails-5


【解决方案1】:

在您的 lib/tasks 目录中创建一个文件 somefile.rake

namespace :migrate do
  desc "create some SharedAccess"
  task shared_access: :environment do
    SharedAccess.create(room_id: 56, user_id: 3)
    SharedAccess.create(room_id: 56, user_id: 4)
    SharedAccess.create(room_id: 56, user_id: 5)
  end
end

现在你可以运行了 docker exec containername bundle exec rake migrate:shared_access

【讨论】:

  • Rake 任务通常具有 .rake 扩展名,即使它们只是 Ruby。这个可能应该被称为migrate.rake,所以它定义了哪个任务是有意义的。
  • 谢谢@Spikie,但我对 Ruby / Docker 还是很陌生。我应该如何在 Docker 中的 lib/tasks 中创建 somefile.rake?
  • 有很多方法可以做到这一点。 1.最简单的方法是在容器中获取一个bash shell:docker exec -it containername sh并运行vim lib/tasks/somefile.rb。 2.如果你的容器是Dockerfile生成的,你可以在你的项目中创建somefile.rake,在app根目录下运行docker build .,那么你的容器中应该存在somefile.rake。
猜你喜欢
  • 1970-01-01
  • 2011-03-10
  • 1970-01-01
  • 2020-06-07
  • 1970-01-01
  • 1970-01-01
  • 2015-12-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多