我想缓存查询结果,以便"为多个请求"提取相同的结果,直到我使缓存无效.例如,我想渲染一个侧边栏,其中包含书籍的所有页面,就像书的索引一样.因为我想在书的每一页上显示它,我必须在每个请求上加载它.我可以使用动作缓存来缓存渲染的侧边栏索引,但我还想实际缓存用于生成侧边栏html的查询结果.Rails提供了一种方法吗?我该怎么做?
我的目录结构如下:
application/
tmp/
rails_code/Capfile
rails_code/config/deploy.rb
rails_code/Gemfile
rails_code/Gemfile.lock
non_rails_code/
Run Code Online (Sandbox Code Playgroud)
我使用capistrano来部署应用程序代码,但是当我运行cap deploy时,它无法使用bundler安装gem,因为它希望Gemfile.lock位于应用程序目录中,而它实际上位于application/rails_code目录中.
如何指定Gemfile的正确位置?
我在rails公司模型中有以下代码:
class Company
include Mongoid::Document
include Mongoid::Timestamps
field :name, type: String
...
has_and_belongs_to_many :users
end
Run Code Online (Sandbox Code Playgroud)
用户模型:
class User
include Mongoid::Document
include Mongoid::Timestamps
include ActiveModel::SecurePassword
field :email, type: String
...
has_and_belongs_to_many :companies
end
Run Code Online (Sandbox Code Playgroud)
数据库中有公司记录,并且用户记录与它们相关联.出于某种原因,以下代码不起作用:
c = Company.first
c.users # returns empty array
Run Code Online (Sandbox Code Playgroud)
同样,以下代码不起作用:
u = User.first
u.companies
Run Code Online (Sandbox Code Playgroud)
但是以下代码可以工作:
c = Company.first
user = User.find c.user_ids.first
Run Code Online (Sandbox Code Playgroud)
以下代码也有效:
u = User.first
company = Company.find u.company_ids.first
Run Code Online (Sandbox Code Playgroud)
因此,如果我尝试从company.users访问用户,它不起作用,但user_ids数组确实有一个用户ID列表,当我尝试从此列表中访问用户时,它可以工作.我该如何解决这个问题?
我使用rails 3.2.5和mongoid 3.0.0.rc
我需要为Rails应用程序设置专用服务器.我不确定这是什么最好的方法.我需要一个可以在很多用户注册网站的情况下扩展的解决方案.我想这将是一个中等规模的应用程序.
以下是更具体的问题:
一个相关的问题,虽然与这篇文章没有直接关系:我通常总是在系统范围内使用sudo安装一个ruby,并安装libssl等软件包,然后使用不带sudo的rvm安装其他软件包.这是正确的方法,还是我可以直接安装我需要的所有红宝石rvm没有安装在系统范围内?
我使用rvm ruby1.9.2p0和rails 3.0.1在我的机器上创建了一个新应用程序,并执行了以下操作:
rails new -J -d mysql appname
git init
git add .
git commit
heroku create
Run Code Online (Sandbox Code Playgroud)
并创建了应用程序.但当我这样做时:
heroku rake db:create --trace
Run Code Online (Sandbox Code Playgroud)
我明白了:
Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)
Couldn't create database for {"reconnect"=>false, "encoding"=>"utf8", "username"=>"root", "adapter"=>"mysql2", "database"=>"app_production", "pool"=>5, "password"=>nil, "socket"=>"/var/run/mysqld/mysqld.sock"}, charset: utf8, collation: utf8_unicode_ci
(in /app)
** Invoke db:create (first_time)
** Invoke db:load_config (first_time)
** Invoke rails_env (first_time)
** Execute rails_env
** Execute db:load_config
** Execute db:create
Run Code Online (Sandbox Code Playgroud)
当我这样做:heroku rake db:migrate --trace,然后跟踪有如下行:
/app/.bundle/gems/ruby/1.8/gems/rake-0.8.7/lib/rake.rb:590:in
Run Code Online (Sandbox Code Playgroud)
这表明它使用的是红宝石1.8而不是红宝石1.9.2
如何在我的heroku应用程序上创建数据库并使其使用ruby …
当我做ruby -v时,我明白了
ruby 1.8.7 (2010-12-23 patchlevel 330) [i686-linux]
Run Code Online (Sandbox Code Playgroud)
我想安装rubygems-1.4.2,但命令:
rvm rubygems 1.4.2
Run Code Online (Sandbox Code Playgroud)
失败,它甚至没有获取rubygems,因为它在curl中失败.所以,我从网上下载文件http://rubyforge.org/frs/?group_id=126,(http://rubyforge.org/frs/download.php/73882/rubygems-1.4.2.tgz),提取它,并将其放在〜/ .rvm/src /,然后再次运行:
rvm rubygems 1.4.2
Run Code Online (Sandbox Code Playgroud)
但它又失败了.如何将rubygems 1.4.2安装到ruby-1.8.7@p330?
ruby ×3
rvm ×2
activerecord ×1
bundler ×1
caching ×1
capistrano ×1
heroku ×1
mongoid ×1
mysql ×1
production ×1
rubygems ×1
stack ×1