标签: rake-task

在rake任务中运行时,bundle包失败

我的环境

香草Ubuntu 12.10,没有rvm或renv.

> gem --version
1.8.23

> ruby --version
ruby 1.9.3p194 (2012-04-20 revision 35410) [x86_64-linux]

> bundle --version
Bundler version 1.2.1
Run Code Online (Sandbox Code Playgroud)

我的问题

我有一个rake任务来打包我的宝石并将它们上传到我的开发和生产服务器.问题是当Gemfile包含git或path gems时,rake任务失败.Bundler已经支持这些类型的宝石的包装,它在我的终端上工作得很好但是在运行rake任务时失败了,我找不到原因.

我的佣金任务

> cat lib/tasks/upload.rake

namespace :deploy do
  desc "Package all gems and upload to remote server"
  task :upload => [:environment] do |t, args|
    if ! system("bundle package --all")
      raise "TOTAL FAIL"
    end

    # Magic method to upload vendor/cache to remote server
  end
end
Run Code Online (Sandbox Code Playgroud)

我的尝试

在终端中运行捆绑包工作:

> bundle package --all
....
Using bson (1.7.0) …
Run Code Online (Sandbox Code Playgroud)

ruby bundle rake-task

7
推荐指数
2
解决办法
1427
查看次数

Rake依赖不执行但调用工作

我一直在尝试运行rake db:test:clone_structure,但它一直无法重建数据库.我终于看了看任务本身:

task :clone_structure => [ "db:structure:dump", "db:test:load_structure" ]
Run Code Online (Sandbox Code Playgroud)

当我运行跟踪时,我注意到db:test:load_structure没有执行:

$ rake db:test:clone_structure --trace
** Invoke db:test:clone_structure (first_time)
** Invoke db:structure:dump (first_time)
** Invoke environment (first_time)
** Execute environment
** Execute db:structure:dump
** Invoke db:test:purge (first_time)
** Invoke environment 
** Execute db:test:purge
** Execute db:test:clone_structure
Run Code Online (Sandbox Code Playgroud)

现在,当我将clone_structure任务更改为调用时 load_structure ......

task :clone_structure => [ "db:structure:dump", "db:test:load_structure" ] do   
  db_namespace["test:load_structure"].invoke
end
Run Code Online (Sandbox Code Playgroud)

......一切都突然起作用!

$ rake db:test:prepare --trace

** Invoke db:test:clone_structure (first_time)
** Invoke db:structure:dump (first_time)
** Invoke …
Run Code Online (Sandbox Code Playgroud)

ruby rake rake-task

7
推荐指数
1
解决办法
534
查看次数

如何构建任务'elasticsearch:import:model'

好吧,我安装了elasticsearch-rails gem(版本0.1.5),我可以清楚地看到gem文件中的任务.

但是当我跑步的时候

bundle exec rake environment elasticsearch:import:model CLASS='Comment'
Run Code Online (Sandbox Code Playgroud)

我收到这个错误.

跑步rake environment -D并没有向我展示任务.

elasticsearch正在运行,如果我卷曲http://localhost:9200它会回应我.

为什么这不起作用?

rake ruby-on-rails rake-task elasticsearch

7
推荐指数
1
解决办法
2137
查看次数

如何覆盖自定义数据库适配器的rake任务?

我编写了一个自定义数据库适配器,可以在rails服务器运行时正常有效地工作.我现在想添加用于创建,删除和迁移数据库的常用rake任务定义.

我想实现:

db:[drop|create|migrate]
Run Code Online (Sandbox Code Playgroud)

如何使用我的gem打包这些定义,以便它们覆盖使用gem的任何人的默认定义?

我查看了其他适配器的源代码,但所有rake任务逻辑似乎都被烘焙到active_record本身,每个任务只是打开适配器名称.

rake activerecord ruby-on-rails rake-task ruby-on-rails-3

6
推荐指数
1
解决办法
5239
查看次数

使用rake转储和加载数据库

如何指定将我的数据库转储/加载到yaml的目录?

rake db:data:dump_dir
Run Code Online (Sandbox Code Playgroud)

创建

db/2011-08-31_14:10:57_+0100/
Run Code Online (Sandbox Code Playgroud)

rake db:data:load_dir

No such file or directory - <RAILS_ROOT>/db/base
Run Code Online (Sandbox Code Playgroud)

我的问题是你是否可以指定转储到/加载的目录名称以及如何?

谢谢

rake rake-task ruby-on-rails-3

6
推荐指数
1
解决办法
8263
查看次数

在调用Rake任务时设置多个环境变量

我可以调用Rake任务并设置一个像这样的环境变量:

$ ONE=1 rake temp:both
Run Code Online (Sandbox Code Playgroud)

但是我如何设置两个环境变量?

这不起作用:

 $ ONE=1 TWO=2 rake temp:both 
Run Code Online (Sandbox Code Playgroud)

这有效,但令人困惑的是:

$ ONE=1 rake temp:both TWO=2 
Run Code Online (Sandbox Code Playgroud)

如何在通话之前传递多个环境rake

ruby rake ruby-on-rails rake-task ruby-on-rails-3

6
推荐指数
1
解决办法
4653
查看次数

Rails:rake任务,参数不起作用

这是我的佣金任务

namespace :users do
  task :change_role, [:role] => :environment do |t, args|
    puts args.role
  end
end
Run Code Online (Sandbox Code Playgroud)

我这样称呼它:

rake users:change_role["role"] 但是我收到了这个错误 no matches found: users:change_role["role"]

rake zsh ruby-on-rails rake-task

6
推荐指数
3
解决办法
1806
查看次数

如何使用RSpec测试rake任务?

我有一个使用资产管道的Ruby 2.1/Rails 3.2应用程序.我们还使用了一个脆弱的(alpha)gem,导致"rake assets:precompile"有时失败.我想编写一个rspec测试,确保在我们提交代码之前,这个rake任务总是通过.

我在spec/asset_precompile_spec.rb中编写了一个测试,如下所示:

require 'spec_helper'
require 'rake'

describe 'assets:precompile' do
  before { MyApp::Application.load_tasks }
  it { expect { Rake::Task['assets:precompile'].invoke }.not_to raise_exception }
end
Run Code Online (Sandbox Code Playgroud)

然后我使用命令行运行它

rspec spec/lib/assets_precompile_spec.rb
Run Code Online (Sandbox Code Playgroud)

我得到的输出看起来像这样:

  1) assets:precompile 
     Failure/Error: it { expect { Rake::Task['assets:precompile'].invoke }.not_to raise_exception }
       expected no Exception, got #<RuntimeError: Command failed with status (1): [/home/railsdev/.rvm/rubies/ruby-2.1.2/bin/...]> with backtrace:
         # ./spec/lib/assets_precompile_spec.rb:7:in `block (3 levels) in <top (required)>'
         # ./spec/lib/assets_precompile_spec.rb:7:in `block (2 levels) in <top (required)>'
     # ./spec/lib/assets_precompile_spec.rb:7:in `block (2 levels) in <top (required)>'

Finished in 0.71247 …
Run Code Online (Sandbox Code Playgroud)

ruby-on-rails rake-task rspec-rails ruby-on-rails-3.2 ruby-2.1

6
推荐指数
1
解决办法
1736
查看次数

为什么我的rake任务在我的测试中运行了两次?

我有一个rake任务测试,我按照我在网上找到的唯一例子进行设置.

它看起来像这样:

require 'test_helper'
require 'minitest/mock'
require 'rake'

class TestScrapeWelcome < ActiveSupport::TestCase
  def setup
    Rake.application.init
    Rake.application.load_rakefile

    @task = Rake::Task['scrape:scrape']
    @task.reenable
  end

  def teardown
    Rake::Task.clear
  end

  test "scraping text and sending to elasticsearch" do
    mocked_client = Minitest::Mock.new
    get_fixtures.each_with_index do |arg,i|
      mocked_client.expect :index, :return_value, [index: "test", type: 'welcome', id: i, body: arg]
    end
    Elasticsearch::Model.stub :client, mocked_client do
      @task.invoke
    end
    assert mocked_client.verify
  end

  private

  def get_fixtures
    (0..11).map { |i|
      File.read("test/fixtures/scrape/index_#{i}.json")
    }
  end

end
Run Code Online (Sandbox Code Playgroud)

但是一旦任务开始运行,它再次开始运行而没有我做任何事情(puts@task.invoke显示之前和之后打印任务只运行一次).

rake ruby-on-rails minitest rake-task

6
推荐指数
2
解决办法
2412
查看次数

无法在 VS Code 中调试 rake 任务

我正确配置了环境以在 VS Code 中调试 Rails 应用程序。

它适用于调试 Rails Server。当我开始调试时,它会启动服务器并在我标记的断点处停止。

但是,我不知道如何调试本地文件,例如 rake 任务。它甚至运行任务,但不会在断点处停止。

以下是我如何设置我的环境。

Ubuntu running on WSL2.
VSCode running on windows
Run Code Online (Sandbox Code Playgroud)

安装了扩展:

Remote - WSL from Microsoft
Ruby from PengLv
Run Code Online (Sandbox Code Playgroud)

安装的宝石:

gem install ruby-debug-ide
gem install debase
Run Code Online (Sandbox Code Playgroud)

宝石文件:

gem 'ruby-debug-ide'
gem 'debase'`
Run Code Online (Sandbox Code Playgroud)

/.vscode/launch.json 中调试本地文件的配置:

{
  // Use IntelliSense to learn about possible attributes.
  // Hover to view descriptions of existing attributes.
  // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
  "version": "0.2.0",
  "configurations": [
    {
      "name": "Rake fd:test",
      "type": "Ruby",
      "request": "launch",
      "cwd": …
Run Code Online (Sandbox Code Playgroud)

debugging ruby-on-rails rake-task visual-studio-code

6
推荐指数
1
解决办法
2734
查看次数