当一般使用带有项目的bundle和Rails时,你只能访问Gemfile中定义的gem.虽然这是有道理的,但它可能是有限的.当我想使用团队的其他成员不使用的某个RSpec格式化程序时,我发现它主要限制了它.除非它在Gemfile中,否则无法访问.
任何方式或我必须将其添加到Gemfile?
更新:我的问题不是Bundler而是Spork.在没有Spork的情况下运行RSpec时我没有使用任何格式化程序的问题.
更新#2:看起来使用Bundler仍然是导致问题的原因.使用Spork和不使用Spork之间的区别在于,在没有Spork的情况下运行RSpec时,它会在加载项目并进入Bundler"sandbox"之前加载格式化程序.
使用Bundler:
$ bundle exec irb
>> require 'fivemat'
LoadError: cannot load such file -- fivemat
from (irb):1:in `require'
from (irb):1
from /Users/arikfr/.rvm/rubies/ruby-1.9.3-p194/bin/irb:16:in `<main>'
Run Code Online (Sandbox Code Playgroud)
没有Bundler:
$ irb
>> require 'fivemat'
=> true
Run Code Online (Sandbox Code Playgroud) 我们有一个Rails应用程序,我们用RSpec测试.我们想要规范依赖于Memcached的操作.这样做的最佳做法是什么?
我想通过将所有调用存根来实现这一点Rails.cache.这是一个好主意吗?
根据@Pan Thomakos的建议,我正在添加一些关于我正在尝试测试的场景的其他详细信息:
我们在系统中有帐户的概念,因此在每次请求时我们都会检索当前用户和当前帐户.因为系统中的帐户不多,所以我们将它们全部保存在缓存中并从那里检索它们.
def self.find_by_slug(slug)
Rails.cache.fetch(Account.cache_key_for_slug(slug), :expires_in => 1.day) { super }
end
Run Code Online (Sandbox Code Playgroud)
出于这个原因,在这种情况下缓存不仅是一个很好的行为,而是预期的行为和我想要测试的东西.因此,关闭缓存是行不通的.
当Rails启动时,它会预加载所有依赖项(gems),这会导致启动时间非常慢.在我正在进行的中型项目中,Rails的开始时间为10-15秒取决于机器.
虽然这不是生产中的问题,但这是一个巨大的发展痛苦.特别是在工作TDD/BDD时.有加速测试的解决方案(如spork),但它们引入了自己的问题.
我的问题是:为什么不在每个代码文件中需要所需的依赖项,而不是在启动时预加载所有内容?
手动要求的缺点是什么?额外的代码行?
我们正在使用SQLAlchemy和Alembic(以及Flask-SQLAlchemy和Flask-Migrate)。如何检查是否有待处理的迁移?
我尝试查看Alembic和Flask-Migrate的文档,但找不到答案。
我没有在文档中找到此内容-自定义事件可能具有的自定义参数数量是否有限制?
该文档确实提到了25个用户自定义参数的限制,但是事件自定义参数又如何-是否有类似的限制?
我正在关注Django教程并在本教程的第4部分遇到错误.我到了我正在编写投票视图的部分,它使用反向重定向到另一个视图.出于某种原因,反向失败,出现以下异常:
import()参数1必须是string,而不是instancemethod
目前我的项目的urls.py看起来像这样:
from django.conf.urls.defaults import *
from django.contrib import admin
admin.autodiscover()
urlpatterns = patterns('',
(r'^polls/', include('mysite.polls.urls')),
(r'^admin/(.*)', include(admin.site.root)),
)
Run Code Online (Sandbox Code Playgroud)
和app urls.py是:
from django.conf.urls.defaults import *
urlpatterns = patterns('mysite.polls.views',
(r'^$', 'index'),
(r'^(?P<poll_id>\d+)/$', 'details'),
(r'^(?P<poll_id>\d+)/results/$', 'results'),
(r'^(?P<poll_id>\d+)/vote/$', 'vote'),
)
Run Code Online (Sandbox Code Playgroud)
投票视图是:(我已将其简化为仅包含错误的行)
def vote(request, poll_id):
return HttpResponseRedirect(reverse('mysite.polls.views.results', args=(1,)))
Run Code Online (Sandbox Code Playgroud)
当我从项目的urls.py中删除admin urls include时,即将其变为:
urlpatterns = patterns('',
(r'^polls/', include('mysite.polls.urls')),
#(r'^admin/(.*)', include(admin.site.root)),
)
Run Code Online (Sandbox Code Playgroud)
有用.
我尝试了很多东西,无法理解我做错了什么.
使用Ruby 1.8.7:
>> require 'time'
>> Time.parse '01/28/2012'
=> Sat Jan 28 00:00:00 +0200 2012
>> Time.parse '28/01/2012'
=> ArgumentError: argument out of range
Run Code Online (Sandbox Code Playgroud)
使用Ruby 1.9.3:
>> require 'time'
>> Time.parse '28/01/2012'
=> 2012-01-28 00:00:00 +0200
>> Time.parse '01/28/2012'
=> ArgumentError: argument out of range
Run Code Online (Sandbox Code Playgroud)
看起来在Ruby 1.8.7中它接受美国格式(月/日/年),而在Ruby 1.9.3中它只接受非美国格式(日/月/年).
有没有办法将此行为更改为Ruby 1.8.7?