标签: ruby

Rake vs. Thor用于自动化脚本?

我希望自动执行以下操作:

  • 使用预先选择的数据库创建一个新的Ruby on Rails应用程序,Git初始化它,创建一个Heroku项目,提交所有文件等.
  • 通过SSH将文件夹中的所有文件上传到另一台计算机,但不要覆盖文件.
  • 升级Ubuntu,通过apt-get安装所有基本软件包.

根据我的理解,这方面的工具是Rake和Thor,但是,我应该使用哪一个?

在我看来,耙子更具事实性和受欢迎程度.我听过有人推荐Thor.

这些如何在破败中相互对立?

ruby rake thor

46
推荐指数
2
解决办法
1万
查看次数

Ruby 1.9 - 无效的多字节字符(US-ASCII)

我试图让我的rails应用程序(2.3.5)在Ruby 1.9上运行,我有这个函数在字符串上进行一些转换:

def replace_special_chars(downcase = true)
if downcase 
  string = self.downcase
else
  string = self
end
string.gsub! /á|ã|à|ä|â/, 'a'
string.gsub! /é|è|ë|ê/, 'e'
string.gsub! /í|ì|ï|î/, 'i'
string.gsub! /ó|õ|ò|ô|ö/, 'o'
string.gsub! /ú|ù|ü|û/, 'u'
string.gsub! /ç/, 'c'
string.gsub! /&/, 'e'
string.gsub! /\s/, '-'
string.gsub! /[^a-zA-Z_0-9-]/, ''
string.gsub! /-(-)+/, '-'
string
end
Run Code Online (Sandbox Code Playgroud)

但是当我尝试启动服务器时,我收到了这个错误:

<internal:lib/rubygems/custom_require>:29:in `require':   
/Users/.../lib/nzn_string.rb:11: invalid multibyte char (US-ASCII) (SyntaxError)
/Users/.../lib/nzn_string.rb:11: invalid multibyte char (US-ASCII) 
/Users/.../lib/nzn_string.rb:11: syntax error, unexpected $end, expecting keyword_end
string.gsub! /á|ã|à|ä|â/, 'a'
                ^
Run Code Online (Sandbox Code Playgroud)

来自:29:在`require'

在ruby 1.9上执行此操作的正确方法是什么?我不知道我在这里失踪了什么

ruby ascii ruby-on-rails-3

46
推荐指数
1
解决办法
3万
查看次数

为Sinatra设置默认content_type

在Sinatra,是否可以content_type 'application/json'设置默认值?因为我正在写一个api.

ruby json content-type sinatra

46
推荐指数
2
解决办法
2万
查看次数

为什么在ruby/rails/activerecord中总是不需要self?

在测试轨道模型中的getter/setter对时,我发现了一个很好的行为示例,我一直认为它很奇怪且不一致.

在这个例子中,我正在处理class Folder < ActiveRecord::Base.

Folder belongs_to :parent, :class_name => 'Folder'

在getter方法上,如果我使用:

def parent_name
  parent.name
end
Run Code Online (Sandbox Code Playgroud)

...要么...

def parent_name
  self.parent.name
end
Run Code Online (Sandbox Code Playgroud)

...结果完全一样,我得到了父文件夹的名称.但是,如果我使用getter方法...

def parent_name=(name)
  parent = self.class.find_by_name(name)
end
Run Code Online (Sandbox Code Playgroud)

......父母变成零,但如果我用......

def parent_name=(name)
  self.parent = self.class.find_by_name(name)
end
Run Code Online (Sandbox Code Playgroud)

......那么它的确有效.

所以,我的问题是,为什么你有时需要声明self.method,为什么你只能使用局部变量?

这似乎需要/使用self的ActiveRecord的不一致,我想明白这一点更好,所以我不觉得我一直在猜测我是否需要自行申报与否.您应该/何时不应该在ActiveRecord模型中使用self?

ruby activerecord self ruby-on-rails-3

46
推荐指数
1
解决办法
8284
查看次数

如何从Ruby on Rails应用程序中删除gem?

我在我的Rails应用程序(设计)上安装了一个gem.安装宝石后,我意识到我不需要它.

我想删除gem,它的依赖项以及它在我的应用程序上创建的文件.换句话说,我想将系统恢复到以前在gem之前的状态.我怎样才能做到这一点?(我正在使用Ruby on Rails 3.)

ruby rubygems ruby-on-rails

46
推荐指数
4
解决办法
9万
查看次数

运行规范时禁止Ruby警告

当我运行我的规格时,我正在寻找一种方法来抑制Ruby警告.

spec spec/models/account_spec.rb
Run Code Online (Sandbox Code Playgroud)

我收到警告,例如:

DEPRECATION WARNING: ActiveSupport::Dependencies.load_paths is deprecated, ...
warning: already initialized constant SOME_CONSTANT_NAME
Run Code Online (Sandbox Code Playgroud)

删除ActiveSupport警告很容易ActiveSupport::Deprecation.silenced = true.

作为spec命令的一部分,如何防止已初始化的常量警告?或者通过创建另一个spec可以抑制此类警告的文件.请记住,这些警告来自gem文件,因此我无法进入这些文件并将其包围起来Kernel.silence_warnings.

注意: 我知道抑制警告很糟糕.但是,当我spec从内部运行单个内容时,vim如果警告不会使我的屏幕混乱,那将会很好.

ruby vim warnings rspec ruby-on-rails

46
推荐指数
7
解决办法
4万
查看次数

重写Ruby中的to_s方法是不是很糟糕?

我一直在试验,发现我喜欢重新定义Object的to_s方法.

这是一个坏主意还是好的做法?

ruby

46
推荐指数
3
解决办法
1万
查看次数

在Ruby中,有没有办法使用hash.each_with_index这样的东西做| [k,v],i |?

否则,它需要

h = {:a => 1, :b => 2.2}
h.each_with_index do |pair, i|
  k = pair[0]; v = pair[1]
  p k, v, i
end
Run Code Online (Sandbox Code Playgroud)

设置kv这种方式似乎有点笨拙.它可以更简单或类似的东西

h.each_with_index do |[k,v], i|
Run Code Online (Sandbox Code Playgroud)

ruby

46
推荐指数
1
解决办法
9510
查看次数

Rails 5 API Controller中未定义的实例方法"respond_to"

--api我创建的rails 5中有一个错误

NoMethodError (undefined method `respond_to' for #<Api::MyController:0x005645c81f0798>
Did you mean?  respond_to?):
Run Code Online (Sandbox Code Playgroud)

但是,在rails 4.2的文档中,它说http://edgeguides.rubyonrails.org/4_2_release_notes.html

respond_with和相应的类级别respond_to已被移动到响应者gem.将gem'responseders','〜> 2.0'添加到您的Gemfile中以使用它:

实例级的respond_to不受影响:

我正在调用实例方法.怎么了?

class ApplicationController < ActionController::API
end

# ...
class Api::MyController < ApplicationController

  def method1
    # ...
    respond_to do |format|
      format.xml { render(xml: "fdsfds") }
      format.json { render(json: "fdsfdsfd" ) }
    end
Run Code Online (Sandbox Code Playgroud)

ruby rest ruby-on-rails ruby-on-rails-5

46
推荐指数
2
解决办法
3万
查看次数

如何在Ruby on Rails中进行电子邮件验证?

我在Rails中进行电子邮件验证:

validates_format_of :email, :with => /\A([^@\s]+)@((?:[-a-z0-9]+\.)+[a-z]{2,})\z/i
Run Code Online (Sandbox Code Playgroud)

此外,我在前端进行HTML5验证,但电子邮件地址如

..abc@gmail.com
.abc@gmail.com
Run Code Online (Sandbox Code Playgroud)

仍然有效.我错过了什么?

ruby email ruby-on-rails

46
推荐指数
8
解决办法
4万
查看次数