Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/59.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 从Rails应用程序在单独的服务器上启动脚本_Ruby On Rails_Ruby - Fatal编程技术网

Ruby on rails 从Rails应用程序在单独的服务器上启动脚本

Ruby on rails 从Rails应用程序在单独的服务器上启动脚本,ruby-on-rails,ruby,Ruby On Rails,Ruby,在MyRails应用程序中,当用户单击某个按钮时,当前将在后台启动内部创建的脚本。为了简单起见,我们将其命名为myScript。在我的Rails应用程序中,我基本上有: def run! `myScript with some arguments` end 现在,该脚本将作为进程在运行Rails应用程序的同一台机器上运行 我们希望在一台服务器上托管所有Ruby/Rails应用程序,并使用单独的服务器来运行脚本。可以在不同的机器上启动该脚本吗?如果您需要其他信息,请告诉我。我使用ssh处理这

在MyRails应用程序中,当用户单击某个按钮时,当前将在后台启动内部创建的脚本。为了简单起见,我们将其命名为
myScript
。在我的Rails应用程序中,我基本上有:

def run!
  `myScript with some arguments`
end
现在,该脚本将作为进程在运行Rails应用程序的同一台机器上运行


我们希望在一台服务器上托管所有Ruby/Rails应用程序,并使用单独的服务器来运行脚本。可以在不同的机器上启动该脚本吗?如果您需要其他信息,请告诉我。

我使用ssh处理这些类型的事情

require 'net/ssh'
Net::SSH.start('server.com', 'username', password: "asdasd") do |ssh|
  $stdout.print ssh.exec!("cdc && curl https://gist.github.com/mhenrixon/asdasd123123/raw/123123asdasd/update.rb | rails c production")
end

我认为这是最简单的方法,但是sinatra/rails侦听器也不是一个坏主意。

我使用ssh处理这些类型的事情

require 'net/ssh'
Net::SSH.start('server.com', 'username', password: "asdasd") do |ssh|
  $stdout.print ssh.exec!("cdc && curl https://gist.github.com/mhenrixon/asdasd123123/raw/123123asdasd/update.rb | rails c production")
end

我认为这是最简单的方法,但sinatra/rails侦听器也不是一个坏主意。

要完全窃取Dogbert的答案,我会选择HTTP解决方案。创建一个后台作业(Sidekick、Queue Classic),并在第二台服务器上创建一个简单的作业,该作业可以执行get、post或其他任何操作

HTTP解决方案将涉及一点设置成本(可能是时间和学习),但最终它将比SSH解决方案更健壮,因为您不必担心IP或用户等问题。只需一个简单的URL即可。另外,如果您使用Capistrano等设备,部署将非常简单


这些作业不能在Web服务器上运行,但要使用后台进程,这有什么原因吗

直接窃取Dogbert的答案:我会选择HTTP解决方案。创建一个后台作业(Sidekick、Queue Classic),并在第二台服务器上创建一个简单的作业,该作业可以执行get、post或其他任何操作

HTTP解决方案将涉及一点设置成本(可能是时间和学习),但最终它将比SSH解决方案更健壮,因为您不必担心IP或用户等问题。只需一个简单的URL即可。另外,如果您使用Capistrano等设备,部署将非常简单


这些作业不能在Web服务器上运行,但要使用后台进程,这有什么原因吗

我可以想到两种方法:使用SSH登录并执行命令,如
SSHuser@host--带有一些参数的myscript
,或者在该机器上创建一个HTTP服务器并发送正常的GET/POST请求(使用一些身份验证)。我熟悉SSH,但不熟悉应用程序内部。您可以在ruby中使用SSH?您可以使用(纯ruby解决方案),也可以像调用上面的
myScript
一样调用命令行
SSH
命令。有趣的是,我将对此进行一些思考,并与我的团队讨论。我暂时不回答这个问题,看看是否还有其他人有其他想法。非常感谢。我个人建议在另一台服务器上创建一个轻量级应用程序(可能使用Sinatra),并像调用任何其他远程API一样调用它。我可以想到两种方法:使用SSH登录并执行命令,如
SSHuser@host--带有一些参数的myscript
,或者在那台机器上创建一个HTTP服务器并发送正常的GET/POST请求(带有一些身份验证)。您可以在ruby中使用SSH?您可以使用(纯ruby解决方案),也可以像调用上面的
myScript
一样调用命令行
SSH
命令。有趣的是,我将对此进行一些思考,并与我的团队讨论。我暂时不回答这个问题,看看是否还有其他人有其他想法。非常感谢。我个人建议在另一台服务器上创建一个轻量级应用程序(可能使用Sinatra),并像调用任何其他远程API一样调用它。+1;如果你想在Rails环境下的另一台服务器上运行这个,你需要确保你的应用程序安装在那里,然后使用script/runner启动脚本如果你正确设置了ssh密钥,你可以不用密码登录,我将这个标记为正确,因为这是我目前使用的方法。此时,我们不希望在另一台计算机上安装web服务器。谢谢;如果你想在Rails环境下的另一台服务器上运行这个,你需要确保你的应用程序安装在那里,然后使用script/runner启动脚本如果你正确设置了ssh密钥,你可以不用密码登录,我将这个标记为正确,因为这是我目前使用的方法。此时,我们不希望在另一台计算机上安装web服务器。谢谢