我是rails应用程序的新手.我需要更改表的列名.所以我浏览了一些网站,正如你提到的我想写的迁移文件..
class RenameNameToFirstnameInUsers < ActiveRecord::Migration
def self.up
rename_column 'users', 'name', 'first_name'
end
def self.down
rename_column 'users', 'first_name', 'name'
end
end
Run Code Online (Sandbox Code Playgroud)
如何保存这个文件和在哪里?
的applicationName /分贝/迁移/
我能以什么名义拯救这个?到目前为止,我已经看到很多文件,但所有那些都有一些big_number的前缀
保存后,如何在我的本地测试?
我有一个rake任务在dev env中运行正常,但不是prod.
task :sample_test_quote => :environment do
QuoterTester.test
end
Run Code Online (Sandbox Code Playgroud)
QuoterTester是一个带有类方法测试的模型类.
在dev下运行任务工作正常,如下所示:
rake sample_test_quote
Run Code Online (Sandbox Code Playgroud)
而在刺激下,我得到了这个:
$ RAILS_ENV=production rake sample_test_quote --trace
** Invoke sample_test_quote (first_time)
** Invoke environment (first_time)
** Execute environment
** Execute sample_test_quote
rake aborted!
uninitialized constant QuoterTester
org/jruby/RubyModule.java:2590:in `const_missing'
/Users/kimptoc/.rvm/gems/jruby-1.6.5@global/gems/rake-0.9.2.2/lib/rake/ext/module.rb:36:in `const_missing'
org/jruby/RubyMethod.java:133:in `call'
/Users/kimptoc/Documents/ruby/ecom/ecom1/lib/tasks/sample_test_quote.rake:3:in `(root)'
org/jruby/RubyProc.java:270:in `call'
org/jruby/RubyProc.java:220:in `call'
/Users/kimptoc/.rvm/gems/jruby-1.6.5@global/gems/rake-0.9.2.2/lib/rake/task.rb:205:in `execute'
org/jruby/RubyArray.java:1612:in `each'
/Users/kimptoc/.rvm/gems/jruby-1.6.5@global/gems/rake-0.9.2.2/lib/rake/task.rb:200:in `execute'
/Users/kimptoc/.rvm/gems/jruby-1.6.5@global/gems/rake-0.9.2.2/lib/rake/task.rb:158:in `invoke_with_call_chain'
/Users/kimptoc/.rvm/rubies/jruby-1.6.5/lib/ruby/1.8/monitor.rb:191:in `mon_synchronize'
/Users/kimptoc/.rvm/gems/jruby-1.6.5@global/gems/rake-0.9.2.2/lib/rake/task.rb:151:in `invoke_with_call_chain'
/Users/kimptoc/.rvm/gems/jruby-1.6.5@global/gems/rake-0.9.2.2/lib/rake/task.rb:144:in `invoke'
/Users/kimptoc/.rvm/gems/jruby-1.6.5@global/gems/rake-0.9.2.2/lib/rake/application.rb:116:in `invoke_task'
/Users/kimptoc/.rvm/gems/jruby-1.6.5@global/gems/rake-0.9.2.2/lib/rake/application.rb:94:in `top_level'
org/jruby/RubyArray.java:1612:in `each'
/Users/kimptoc/.rvm/gems/jruby-1.6.5@global/gems/rake-0.9.2.2/lib/rake/application.rb:94:in `top_level'
/Users/kimptoc/.rvm/gems/jruby-1.6.5@global/gems/rake-0.9.2.2/lib/rake/application.rb:133:in `standard_exception_handling'
/Users/kimptoc/.rvm/gems/jruby-1.6.5@global/gems/rake-0.9.2.2/lib/rake/application.rb:88:in `top_level'
/Users/kimptoc/.rvm/gems/jruby-1.6.5@global/gems/rake-0.9.2.2/lib/rake/application.rb:66:in `run'
/Users/kimptoc/.rvm/gems/jruby-1.6.5@global/gems/rake-0.9.2.2/lib/rake/application.rb:133:in `standard_exception_handling' …Run Code Online (Sandbox Code Playgroud) 如果我有一个耙子调用多个其他耙子.
一旦我发起父母耙
rake myapp:main
Run Code Online (Sandbox Code Playgroud)
然后在rake中调用done会为每个任务加载环境,还是在运行时只执行一次活动rake myapp:main?
namespace :myapp do
desc "Main Run"
task :main => :environment do
Rake::Task['myapp:task1'].invoke
Rake::Task['myapp:task2'].invoke
end
task :task1 => :environment do
# Does the first task
end
task :task2 => :environment do
# Does the second task
end
end
Run Code Online (Sandbox Code Playgroud) 我在尝试使用Nokogiri运行rake任务时遇到此错误.
这是代码.
namespace :tops do
desc "Get Tops Description"
task get_description: :environment do
require 'nokogiri'
require 'open-uri'
doc = Nokogiri::HTML(open("http://ceratoboutique.com/collections/tops"))
price = Array.new
items = Array.new
brands = Array.new
sale_price = Array.new
image = Array.new
item_url = Array.new
price = doc.xpath("//del").collect {|node| node.text.strip}
items = doc.xpath("//div/a/h4").collect {|node| node.text.strip}
brands = doc.xpath("//span[contains(@class,'vendor')]").collect {|node| node.text.strip}
sale_price = doc.xpath("//span[contains(@class, 'price')]/text()").collect {|node| node.text.strip}
image = doc.xpath("/div/a/img/@src").collect {|node| node.text.strip}
item_url = doc.css('div.details a').map { |link| link['href'] }.collect
price.each do |prices|
Tops.create(description: price)
end
end
end …Run Code Online (Sandbox Code Playgroud) 我已经seeds.rb填充了我的开发数据库.我知道我可以seeds.rb使用以下方法轻松应用于我的测试数据库:
rake db:seed RAILS_ENV=test
Run Code Online (Sandbox Code Playgroud)
但是,我想要一个不同的 seeds.rb文件来填充我的测试数据库.也许吧seeds_test.rb.这对于rails程序员来说一定是一个非常普遍的要求,不是吗?
如果没有简单的方法可以做到这一点rake db:seed:seeds_test RAILS_ENV=test,那么我将如何创建一个rake任务呢?我会想到这样的事情lib/tasks/test_seeds.rake:
namespace :db do
desc "Seed data for tests"
task :seed_test => :environment do
load "#{Rails.root}/db/seeds_test.rb"
end
end
Run Code Online (Sandbox Code Playgroud)
我认为这样可行,但是我希望我的rake任务能够自动知道只将这个应用到测试数据库而不必指定:
rake db:seed_test RAILS_ENV=test
Run Code Online (Sandbox Code Playgroud)
如何获取rake任务,以便我必须在命令行中输入:
rake db:seed_test
Run Code Online (Sandbox Code Playgroud)
更新:另一个stackoverflow问题链接到答案的位置:
Rails.env = 'test'
Run Code Online (Sandbox Code Playgroud)
不幸的是,实际上并没有做任何事情(至少从Rails 4.2开始):(.
我的rails4应用程序正在使用docker运行.它运行rake任务以从AWS SQS获取消息.
我遇到的问题是日志无法及时显示在控制台中.在发生异常/错误之前,控制台不会显示任何内容.换句话说,如果我的应用程序工作正常,则没有日志进入控制台.但是如果应用程序出错了,所有日志(信息,警告和错误)都汇集在一起!
我已经将config/production.rb配置为打击:
config.logger = Logger.new(STDOUT)
config.logger.level = Logger.const_get('INFO')
config.log_level = :info
Run Code Online (Sandbox Code Playgroud)
我google'rake任务日志无法正常工作',但没什么用处.这是rails日志问题还是rake任务日志问题,或者是docker问题?
希望得到一些建议!
我正在尝试以这样的方式进行 rake 任务:
require 'open-uri'
namespace :news_parser do
desc 'Parsing news from 6 news sites'
task :parse_news do
load 'lib/news_parser.rb'
ProcherkParser.new.save_novelties
VikkaParser.new.save_novelties
InfomistParser.new.save_novelties
ZmiParser.new.save_novelties
VycherpnoParser.new.save_novelties
ProvceParser.new.save_novelties
end
end
Run Code Online (Sandbox Code Playgroud)
在我的代码中,lib/news_parser.rb我有类和实例方法,它们可以在 Rails 控制台中完美运行,只需执行以下操作:
load 'lib/news_parser.rb'
ProcherkParser.new.save_novelties
Run Code Online (Sandbox Code Playgroud)
它将我需要的所有信息保存到我的数据库中。但我怎样才能在 rake 任务中做到这一点呢?任何帮助将不胜感激。谢谢。
在Ruby中必须有一种更有效的方法.我有一个方法列表,可以在多个站点中搜索相同的内容(标题,价格),但根据每个商店中的代码略有不同.例如:
def store1_get_title
def store1_get_price
def store2_get_title
def store2_get_price
def store3_get_title
def store3_get_price
Run Code Online (Sandbox Code Playgroud)
当调用所有这些函数时,我只想要一个带有"namespace"参数的泛型调用来调用这些方法中的任何一个,而不必输入所有这些,例如:
for get_all_stores().each do |store|
store::get_title
store::get_price
end
Run Code Online (Sandbox Code Playgroud)
...会像我想的那样调用store1_get_title,store1_get_price,store2_get_title,store2_get_price.有这样的事情或更好的方法吗?
希望有道理.感谢您的任何意见!
编辑:这些任务是在rake任务代码中.
已经查看了这个堆栈问题,此时我查看了答案中的所有链接.
创建自定义rake任务,代码如下所示:
task :seeding do
op_a = CoverageDetail.create(option: 'a', privacy_and_website_media: 250000.00, privacy_breach_service: 20000,
legal_forensic_cost: 25000.00, call_center_service: 'inc', deductible: 5000.00,
credit_monitoring_individuals: 20000, fraud_resolution_service: 5000, regulatory_defense: 100000.00,
pci_fines_and_costs: 50000.00, crisis_management_and_pr: 50000.00, foreign_notification: 10000.00)
op_b = CoverageDetail.create(option: 'b', privacy_and_website_media: 500000.00, privacy_breach_service: 25000,
legal_forensic_cost: 50000.00, call_center_service: 'inc', deductible: 5000.00,
credit_monitoring_individuals: 25000, fraud_resolution_service: 5000, regulatory_defense: 250000.00,
pci_fines_and_costs: 50000.00, crisis_management_and_pr: 50000.00, foreign_notification: 10000.00)
op_c = CoverageDetail.create(option: 'c', privacy_and_website_media: 1000000.00, privacy_breach_service: 50000,
legal_forensic_cost: 100000.00, call_center_service: 'inc', deductible: 5000.00,
credit_monitoring_individuals: 50000, fraud_resolution_service: 5000, regulatory_defense: 500000.00,
pci_fines_and_costs: …Run Code Online (Sandbox Code Playgroud) 我在测试我的 rake 任务时遇到问题。任务如下所示:
namespace :db do
desc 'Load the seed data from db/seeds.rb'
task :seed => :environment do
puts 'seed'
end
end
Run Code Online (Sandbox Code Playgroud)
我的测试是这样的:
require 'rake'
require 'spec_helper'
RSpec.describe Rake::Task do
describe "db:seed" do
it "runs a task" do
Rake::Task['db:seed'].invoke
end
end
end
Run Code Online (Sandbox Code Playgroud)
一切看起来都不错,但我仍然收到该错误:
Run Code Online (Sandbox Code Playgroud)Failure/Error: Rake::Task['db:seed'].invoke RuntimeError: Don't know how to build task 'db:seed' (See the list of available tasks with `rake --tasks`)
最奇怪的是,通过控制台调用时,同样的任务可以工作:
> rake db:seed
seed
Run Code Online (Sandbox Code Playgroud)
一些想法?