我有6个月的Rails开发经验.我已经构建了一个现在正在使用的Web应用程序,它具有身份验证和授权以及postgresql db.
我正在继续我的第二个Rails应用程序,但这一次,经过经验教训,我想用TDD开发它,因为我注意到它更容易扩展它并修复bug.它发展缓慢,但从长远来看,它更容易处理.
我听说过Rspec和Cucumber,但他们完全被他们搞糊涂了.
我想知道RSpec和Cucumber之间的区别以及它们的用途.
从初学者(也是唯一的开发者)的角度来看,是否确实需要测试框架也是有用的.
看起来新的rails版本与self.up和self.down方法有"变化".
那么,当必须回滚迁移时会发生什么,它如何知道要执行的操作.我需要基于在线教程实现以下方法:
class AddImageToUsers < ActiveRecord::Migration
def self.up
add_column :users, :image_file_name, :string
add_column :users, :image_content_type, :string
add_column :users, :image_file_size, :integer
add_column :users, :image_updated_at, :datetime
end
def self.down
remove_column :users, :image_file_name, :string
remove_column :users, :image_content_type, :string
remove_column :users, :image_file_size, :integer
remove_column :users, :image_updated_at, :datetime
end
end
Run Code Online (Sandbox Code Playgroud)
如何使用新的更改方法执行相同的操作?
我已经安装了Postgresql,然后在我的本地Mac OSX Mountain Lion上运行了一堆rails应用程序并创建了数据库等.过了一段时间,当我启动pgAdminIII并尝试启动数据库服务器时,我遇到了这个错误:
快速谷歌显示这篇文章.更多的浏览指出,可能存在某种postmaster.pid文件,这可能是导致这种情况的根本原因.如果我删除那些东西就没事了.
但是,在我删除计算机上的东西之前,我想确保我以系统的方式调试它,这不会导致更多的问题.
我在删除该文件之前读到的某个地方,我需要运行这个命令:
ps auxw | grep post
Run Code Online (Sandbox Code Playgroud)
如果我没有得到任何结果,可以删除该文件.否则不是.好吧,我得到了这个命令的结果:
AM 476 0.0 0.0 2423356 184 s000 R+ 9:28pm 0:00.00 grep post
Run Code Online (Sandbox Code Playgroud)
所以现在当然我非常困惑.
所以我该怎么做?
这是我的postgres服务器错误日志的一部分:
FATAL: lock file "postmaster.pid" already exists
HINT: Is another postmaster (PID 171) running in data directory "/usr/local/var/postgres"?
Run Code Online (Sandbox Code Playgroud)
Postgresql仍然没有运行,仍然得到相同的错误,没有任何改变.我太老了,没有检查SO就删除了东西.
有些专家可以指导一个菜鸟.
谢谢
嗨我试图在我的一个视图中更改UILabel的文本颜色,但没有运气.
我有没有在这段代码中做过一些非常明显的事情?
self.nameTopRight.backgroundColor = [UIColor redColor];
self.nameBottomRight.textColor = [UIColor redColor];
Run Code Online (Sandbox Code Playgroud) 我在rails应用程序中使用rails generate migrations命令创建了一个表.这是迁移文件:
class CreateListings < ActiveRecord::Migration
def change
create_table :listings do |t|
t.string :name
t.string :telephone
t.string :latitude
t.string :longitude
t.timestamps
end
end
end
Run Code Online (Sandbox Code Playgroud)
然后我想将纬度和经度存储为整数,所以我试图运行:
rails generate migration changeColumnType
Run Code Online (Sandbox Code Playgroud)
并且该文件的内容是:
class ChangeColumnType < ActiveRecord::Migration
def up
#change latitude columntype from string to integertype
change_column :listings, :latitude, :integer
change_column :listings, :longitude, :integer
#change longitude columntype from string to integer type
end
def down
end
end
Run Code Online (Sandbox Code Playgroud)
我期待列类型改变但是rake被中止并且出现以下错误消息.我想知道为什么这不通过?我在我的应用程序中使用postgresql.
rake db:migrate
== ChangeColumnType: migrating ===============================================
-- change_column(:listings, :latitude, :integer)
rake aborted!
An error …
Run Code Online (Sandbox Code Playgroud) 嗨,我的rails应用程序中有一个表没有任何id列或主键.多数民众赞成因为这张桌子是从以前的应用程序带入我的rails应用程序,并且该表格预先填充了数据.我现在意识到,如果没有整数主键,rails就无法在浏览器中显示编辑和显示视图.所以我需要在我的数据库中添加一个id列,它是一个主键并且自动增量.
基于我的谷歌搜索,我发现了一些关于为表创建主键的帖子,但没有完成任何内容.
所以我想知道是否有人可以帮助我.到目前为止,我所知道的是,为了更改表,必须编写一个迁移然后运行它.需要运行以添加id列的命令如下:
rails generate migration add_id_to_businesses id:primary_key
Run Code Online (Sandbox Code Playgroud)
但是,在运行此命令后,没有新列添加到我的数据库中.我不知道如何继续..如何在我的数据库中添加新列?
非常感谢一只手.....谢谢,
我需要使用邮件程序向用户发送电子邮件,将其密码设置为Devise和活动管理员的"可恢复"功能.在开发环境中,我通过在这些文件中添加以下内容来完成此操作:
配置/环境/发展
#Added per active admin install instructions
config.action_mailer.default_url_options = { :host => 'localhost:3000' }
#These settings are for the sending out email for active admin and consequently the devise mailer
ActionMailer::Base.delivery_method = :smtp
ActionMailer::Base.perform_deliveries = true
ActionMailer::Base.raise_delivery_errors = true
ActionMailer::Base.smtp_settings =
{
:address => 'smtp.gmail.com',
:port => 587,
:domain => 'gmail.com', #you can also use google.com
:authentication => :plain,
:user_name => 'XXXXX@gmail.com',
:password => 'XXXXXXX'
}
Run Code Online (Sandbox Code Playgroud)
如何为生产环境获得相同的功能?我想将我的应用程序部署到Heroku.我需要添加哪些文件和代码?
嗨,我使用Ruby作为脚本语言.不是用于Web开发,而是连接到计算机上的本地数据库并对其进行操作.
我想知道如何连接.我需要下载/导入工具吗?我需要什么才能开始?
谢谢,
在使用Devise进行身份验证后,我发现存在一个安全漏洞,在用户注销后,会话变量被保留.这允许任何人按下后退按钮并访问登录用户的上一屏幕.
我将这些行添加到application_controller中
before_filter :set_no_cache
def set_no_cache
response.headers["Cache-Control"] = "no-cache, no-store, max-age=0, must-revalidate"
response.headers["Pragma"] = "no-cache"
response.headers["Expires"] = "Fri, 01 Jan 1990 00:00:00 GMT"
end
Run Code Online (Sandbox Code Playgroud)
在_form.html.erb中,我在顶部添加了这个
<%if user_signed_in? %>
<%=link_to "Sign Out", destroy_user_session_path, :method => :delete %><br/>
<%= form_for(@listing) do |f| %>
<% if @listing.errors.any? %>
...........
Run Code Online (Sandbox Code Playgroud)
然后我在Firefox,Chrome和Safari上测试了该应用程序.
Firefox和Chrome很好,因为我退出并点击了后退按钮,无法看到用户的上一个屏幕,但是,在Safari和Opera中,不安全的行为仍然存在.此代码没有效果.
对于如何解决这个问题,有任何的建议吗?
谢谢