【问题标题】:How can we run a rake task of one application through another application (both running on the same server)?我们如何通过另一个应用程序(都在同一台服务器上运行)运行一个应用程序的 rake 任务?
【发布时间】:2015-10-20 08:08:55
【问题描述】:

问题: 我有两个应用程序 A 和 B 都在同一台服务器上运行。我在文件系统中有一个脚本

cd /data/B/
bundle exec rake -T 

当我通过应用程序 A 的 rails 控制台运行脚本时,由于控制台加载 A 的 gem 并且 rake 任务失败,因此会出错

  eg: system("sh ~/test.sh")

rake aborted!
LoadError: cannot load such file -- log4r
/home/kumolus/api/config/application.rb:9:in `require'
/home/kumolus/api/config/application.rb:9:in `<top (required)>'
/home/kumolus/api/Rakefile:1:in `require'
/home/kumolus/api/Rakefile:1:in `<top (required)>'
(See full trace by running task with --trace)

当我通过 unix 命令行运行脚本时(与我的密码无关)它可以工作

cd ~
sh test.sh  #works

cd /data/A   #my application A's dir
sh ~/test.sh   #also works

我需要它来通过 rails 工作。有什么帮助吗?谢谢!

【问题讨论】:

  • 您在使用 RVM 吗?项目是否有不同的环境,例如不同的 gemsets/ruby 版本?
  • 不,我们正在通过捆绑程序管理应用程序
  • 两个应用程序都在同一个环境中,但它们通过捆绑器使用不同的 gem
  • 当您在命令行上执行它并且它工作时,您是否在应用程序 A 的项目文件夹中?
  • 它可以在任何位置工作,如果我给脚本绝对路径,以及如果我在项目 A 中的脚本相对路径

标签: ruby-on-rails ruby gem bundler


【解决方案1】:

感谢大家的帮助, 由于捆绑程序的默认行为,我找到了一个解决方案。

我将 with_clean_env 方法与一个块一起使用,它被执行。

感谢团队 干杯

【讨论】:

  • 已编辑以包含指向文档的链接,在找到您对我的问题的答案后,我必须查找该链接。
【解决方案2】:

我认为 cd'ing 到文件夹应该足以在执行 cd'ing 的 shell 进程中切换环境。试试这个。

进入项目B并做

which bundle

在命令行中,并将结果复制到某处。 然后做

which rake

并复制结果。

然后,切换到项目 A 并启动 rails 控制台。然后试试这个:

`cd /path/to/projectB; bundle exec rake  -T`

如果这不起作用,试试这个:

`cd /path/to/projectB; <result of doing "which bundle" earlier> exec rake -T`

如果还是不行,试试这个:

`cd /path/to/projectB; <result of doing "which bundle" earlier> exec <result of doing "which rake" earlier> -T`

【讨论】:

  • 这也不起作用,我得到了关于 log4r 的相同错误......就像它在应用程序 B 中使用的那样......但在应用程序 A 中没有......我相信通过 A 加载控制台会加载所有它的库,因此脚本没有加载 log4r gem
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-03-02
  • 2019-01-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-03-02
  • 2014-05-05
相关资源
最近更新 更多